欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

Python中的链式调用

Python基础 迷途小书童 4年前 (2020-09-26) 3505次浏览 0个评论

软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7

视频看这里

此处是 youtube 的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

什么是链式调用

在前文 使用sqlalchemy操作mysql数据库 讲到使用 SQLALchemy 来进行 mysql 操作时,我们有如下的代码

session = DBSession()
session.query(Person).filter(Person.id == '2').update({Person.name: 'xxx'}, synchronize_session=False)
session.commit()
session.close()

重点看 query 查询语句 query().filter().update,类似这种代码的编写方式,就是链式调用,从字面意思上来说,就是将一系列的函数像链子一样串起来的代码编写方式

示例

Python 中实现一个简单的链式调用就是通过构建类方法并返回对象自身 self,来看个具体的例子

class Person:

    def __init__(self, name):
        self._name = name

    def name(self):
        print("您好,我的名字叫: {}".format(self._name))
        return self

    def age(self):
        print("今年18岁!")
        return self

    def job(self):
        print("我是一名软件工程师!")
        return self

if __name__ == '__main__':
    person = Person(name = "xxx")
    person.name()
    print('-' * 20)
    person.name().age()
    print('-' * 20)
    person.name().age().job()

在这里我们创建一个 Person 类,传递一个 name 字符串参数进行实例对象的创建,在这个类里有三个方法,分别是 name()age() 以及 job()。在这三个方法中,返回值都是 self 自身,那么我们就可以不断地调用对象归属类中的方法。

执行上述代码,得到

您好,我的名字叫: xxx
--------------------
您好,我的名字叫: xxx
今年18岁!
--------------------
您好,我的名字叫: xxx
今年18岁!
我是一名软件工程师!

备注

链式调用使得代码在可读性上大大的增强,同时也可以使用尽可能少的代码量去实现更多的操作。但是,链式调用并不算是完美的,它也存在着一定缺陷。比如说当链式调用的方法个数过多时,那么出错的几率就会大幅上升,从而造成调试的困难。

喜欢 (0)

您必须 登录 才能发表评论!