返回顶部
首页 > 资讯 > 后端开发 > Python >python中如何实现链式调用
  • 674
分享到

python中如何实现链式调用

2024-04-02 19:04:59 674人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

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

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


fORM app.models import XXX
query = XXX.objects.all()
query = query.filter(name=123, age=456).filter(salary=999)

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

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

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


class Query:
    def filter(self):
        pass

query = Query()
query.filter().filter()

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

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

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

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


class Query:
    def filter(self):
        return self

query = Query()
query.filter().filter()

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

实际上这里涉及到一个惰性查询的问题。

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

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

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


class Query():
    def __init__(self):
        self.query_condition = {}

    def filter(self, **kwargs):
        self.query_condition.update(kwargs)
        return self
        
query = Query()
a = query.filter(name='kingname').filter(age__gt=15, address='yyyyyy').filter(salary=99999)
print(query.query_condition)

运行效果如下图所示:

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

以上就是python中如何实现链式调用的详细内容,更多关于Python 实现链式调用的资料请关注编程网其它相关文章!

--结束END--

本文标题: python中如何实现链式调用

本文链接: https://lsjlt.com/news/122377.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python中如何实现链式调用
    我们在使用Django的models查询数据库时,可以看到有这种写法: form app.models import XXX query ...
    99+
    2024-04-02
  • Python如何实现链式调用
    本篇内容介绍了“Python如何实现链式调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么是链式调用?链式调用,或者也可以称为方法链(...
    99+
    2023-07-06
  • python如何实现链式函数调用
    这篇文章主要介绍了python如何实现链式函数调用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。链式函数调用感谢你能够认真阅读完这篇文章,希...
    99+
    2024-04-02
  • 如何在JavaScript中实现链式调用(chaining)?
    聚沙成塔·每天进步一点点 ⭐ 专栏简介⭐ JavaScript中的链式调用⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏...
    99+
    2023-09-14
    javascript 开发语言 ecmascript 前端框架 前端 原力计划
  • python中实现链式调用的案例
    小编给大家分享一下python中实现链式调用的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们在使用Django的models查询数据库时,可以看到有这种写...
    99+
    2023-06-14
  • Python怎么实现链式调用
    为什么是链式调用?链式调用,或者也可以称为方法链(Method Chaining),从字面意思上来说就是将一些列的操作或函数方法像链子一样穿起来的 Code 方式。我最开始感知链式调用的「美」,还要从使用 R 语言的管道操作符开始。libr...
    99+
    2023-05-15
    Python
  • javascript如何实现简单链式调用
    小编给大家分享一下javascript如何实现简单链式调用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:jQuery用...
    99+
    2024-04-02
  • jQuery如何实现链式插件调用
    这篇文章给大家分享的是有关jQuery如何实现链式插件调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。链式插件调用jQuery允许“链式”插件的方法调用,以减轻反复查询DOM并...
    99+
    2024-04-02
  • python如何实现链式比较
    这篇文章主要介绍了python如何实现链式比较,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。链式比较感谢你能够认真阅读完这篇文章,希望小编分...
    99+
    2024-04-02
  • python如何实现链式对比
    这篇文章将为大家详细讲解有关python如何实现链式对比,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链式对比我们可以在一行代码中使用不同的运算符对比多个不同的元素。a = 3&nbs...
    99+
    2023-06-27
  • Node.js实现链式回调
    由于异步的关系,代码的书写顺序可能和执行顺序并不一样,可能想先执行A再执行B,但由于异步可能B要先于A执行.例如在OC中使用AFnetworking请求数据然后刷新页面,由于网络请求...
    99+
    2024-04-02
  • Python实现类似jQuery使用中的链式调用的示例
    关于jQuery的链式调用 真正有意义的链式调用也就是方法链(method chaining)。方法链这个词是有的,而且使用的很广泛。其实很多人口中的“链式调用”实际上就是指方法链。但是“链式调用”这个词语...
    99+
    2022-06-04
    链式 示例 类似
  • jQuery如何实现链式操作
    小编给大家分享一下jQuery如何实现链式操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!链式操作jQuery实现方法的链式操...
    99+
    2024-04-02
  • python如何实现双链表
    本篇内容介绍了“python如何实现双链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现双链表需要注意的地方如何插入元素,考虑特殊情况:...
    99+
    2023-06-30
  • JavaScript中链式调用之研习
    一、对象链:方法体内返回对象实例自身(this) 复制代码 代码如下: function ClassA(){ this.prop1 = null; this.prop2 = null...
    99+
    2022-11-21
    链式调用
  • Java 实现分布式服务的调用链跟踪
    目录为什么要实现调用链跟踪?如何实现?第一步,看图、看场景,用户浏览器的一次请求行为所走的路径是什么样的第二步,实现。不想看代码可直接拉最后看结果和原理测试一下结果:为什么要实现调用...
    99+
    2024-04-02
  • go如何实现职责链模式
    这篇文章主要讲解了“go如何实现职责链模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go如何实现职责链模式”吧!职责链模式职责链——英文名 Chain of responsibility...
    99+
    2023-07-05
  • Python如何实现环形链表
    这篇文章主要介绍“Python如何实现环形链表”,在日常操作中,相信很多人在Python如何实现环形链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现环形链表”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • 缓存调用链如何实现JS方法的重载
    小编给大家分享一下缓存调用链如何实现JS方法的重载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是方法重载方法重载是指在...
    99+
    2024-04-02
  • request轻调用链怎么实现
    这篇文章主要介绍“request轻调用链怎么实现”,在日常操作中,相信很多人在request轻调用链怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”request轻调用链怎么实现”的疑惑有所帮助!接下来...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作