首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Python里面实现链式调用

我们在使用Django的models查询数据库时,可以看到有这种写法:

在这种写法里面,query对象有一个方法,这个方法的返回数据还可以继续调用方法,可以这样无限制地调用下去。

这种写法是怎么实现的呢?

如果我们直接写一个类的方法,看看能不能这样调用:

直接对返回的结果再调用一次,就会导致报错了。这是因为在没有显式写return语句的时候,方法会返回,而None对象是没有所谓的方法的。

那么什么东西有方法呢?显然我们的query对象有方法。那么如何让这个方法返回自身这个对象呢?

这个时候,我们就要看看我们在定义类方法的时候,总会写的的第一个参数了。几乎每个类方法里面都会有它。大家只知道在类里面调用类方法的时候可以用,在调用类属性的时候可以用,那么有没有思考过,这个东西如果单独使用会怎么样呢?

实际上,指的就是这个类实例化成一个对象以后,这个对象自身。而这个对象显然是有方法的。所以我们修改一下方法,让它返回:

从图中可以看出,现在已经不会报错了。那么回到最开始的问题,Django里面的链式调用传入查询参数是如何实现的呢?

实际上这里涉及到一个的问题。

当我们不停调用方法的时候,Django会把这些查询条件全部缓存起来,只有当我们需要获取结果,或者查询满足条件的数据有多少条时,它才会真正地连接数据库去查询。

所以我们这里要模拟这个环境,把查询条件缓存起来。

那么为了获取调用方法时传入的参数名,我们就要使用参数。这个参数可以接受所有的key=value形式的参数:

运行效果如下图所示:

在真正需要输出结果的时候,再使用这些缓存的条件,去数据库中查询结果即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210313A01V9400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券