• 售前

  • 售后

热门帖子
入门百科

python中怎样实现链式调用

[复制链接]
Aim_yuan 显示全部楼层 发表于 2021-10-26 14:02:59 |阅读模式 打印 上一主题 下一主题
我们在使用Django的models查询数据库时,可以看到有这种写法:
  1. form app.models import XXX
  2. query = XXX.objects.all()
  3. query = query.filter(name=123, age=456).filter(salary=999)
复制代码
在这种写法内里,query对象有一个
  1. filter
复制代码
方法,这个方法的返回数据还可以继续调用
  1. filter
复制代码
方法,可以如许无穷制地调用下去。
这种写法是怎么实现的呢?
如果我们直接写一个类的方法,看看能不能如许调用:
  1. class Query:
  2.     def filter(self):
  3.         pass
  4. query = Query()
  5. query.filter().filter()
复制代码

直接对
  1. query.filter()
复制代码
返回的结果再调用一次
  1. filter
复制代码
,就会导致报错了。这是由于在没有显式写return语句的时候,方法会返回
  1. None
复制代码
,而None对象是没有所谓的
  1. filter
复制代码
方法的。
那么什么东西有filter方法呢?显然我们的query对象有filter方法。那么如何让这个方法返回自身这个对象呢?
这个时候,我们就要看看我们在界说类方法的时候,总会写的的第一个参数
  1. self
复制代码
了。几乎每个类方法内里都会有它。各人只知道在类内里调用类方法的时候可以用
  1. self.xxx()
复制代码
,在调用类属性的时候可以用
  1. self.yy
复制代码
,那么有没有思索过,这个东西如果单独使用会怎么样呢?
实际上,
  1. self
复制代码
指的就是这个类实例化成一个对象以后,这个对象自身。而这个对象显然是有
  1. filter
复制代码
方法的。所以我们修改一下
  1. filter
复制代码
方法,让它返回
  1. self
复制代码
:
  1. class Query:
  2.     def filter(self):
  3.         return self
  4. query = Query()
  5. query.filter().filter()
复制代码

从图中可以看出,现在已经不会报错了。那么回到最开始的标题,Django内里的链式调用传入查询参数是如何实现的呢?
实际上这里涉及到一个
  1. 惰性查询
复制代码
的标题。
当我们不停调用
  1. .filter()
复制代码
方法的时候,Django会把这些查询条件全部缓存起来,只有当我们必要获取结果,大概查询满意条件的数据有多少条时,它才会真正地毗连数据库去查询。
所以我们这里要模拟这个环境,把查询条件缓存起来。
那么为了获取调用方法时传入的参数名,我们就要使用
  1. **kwargs
复制代码
参数。这个参数可以接受全部的key=value情势的参数:
  1. class Query():
  2.     def __init__(self):
  3.         self.query_condition = {}
  4.     def filter(self, **kwargs):
  5.         self.query_condition.update(kwargs)
  6.         return self
  7.         
  8. query = Query()
  9. a = query.filter(name='kingname').filter(age__gt=15, address='yyyyyy').filter(salary=99999)
  10. print(query.query_condition)
复制代码
运行结果如下图所示:

在真正必要输出结果的时候,再使用这些缓存的条件,去数据库中查询结果即可。
以上就是python中如何实现链式调用的详细内容,更多关于python 实现链式调用的资料请关注草根技术分享其它相关文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作