python中实现链式调用的案例

  介绍

小编给大家分享一下python中实现链式调用的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

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

form  app.models  import  XXX   时间=query  XXX.objects.all ()   query =, query.filter(名称=123,年龄=456).filter(工资=999)

在这种写法里面,查询对象有一个<代码> 方过滤法,这个方法的返回数据还可以继续调用<代码> 方过滤法,可以这样无限制地调用下去。

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

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

class 查询:   ,,,def 过滤器(自我):   ,,,,,,,      时间=query 查询()   .filter query.filter () ()

 python中实现链式调用的案例

直接对<代码> query.filter() 返回的结果再调用一次<代码>过滤器> ,而没有对象是没有所谓的<代码> 方过滤法的。

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

这个时候,我们就要看看我们在定义类方法的时候,总会写的的第一个参数<代码> 了。几乎每个类方法里面都会有它。大家只知道在类里面调用类方法的时候可以用<代码> self.xxx() ,在调用类属性的时候可以用<代码>自我。yy>

实际上,<代码>自我> 方过滤法的,所以我们修改一下<代码> 方过滤法,让它返回自我:<代码>

class 查询:   ,,,def 过滤器(自我):   ,,,,,,,return 自我      时间=query 查询()   .filter query.filter () ()

 python中实现链式调用的案例

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

实际上这里涉及到一个<代码>惰性查询>

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

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

那么为了获取调用方法时传入的参数名,我们就要使用<代码> * * kwargs> class 查询():   ,,,def  __init__(自我):   ,,,,,,,self.query_condition =, {}      ,,,def 过滤器(自我,,* * kwargs):   ,,,,,,,self.query_condition.update (kwargs)   ,,,,,,,return 自我   ,,,,,,,   时间=query 查询()   时间=a  query.filter (name=& # 39; kingname& # 39;) .filter (age__gt=15日,地址=& # 39;yyyyyy& # 39;) .filter(工资=99999)   印刷(query.query_condition)

运行效果如下图所示:

 python中实现链式调用的案例

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

以上是“python中实现链式调用的案例”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

python中实现链式调用的案例