Python - 链式调用 - Black 代码格式化工具 -

本文介绍了Python中的链式调用概念,通过示例展示了如何在类方法中实现链式调用,减少代码量。同时探讨了使用`self`参数的原理,以及如何在链式调用中缓存关键字参数。此外,还提到了Black格式化工具对链式调用代码的影响,即使用圆括号不影响链式调用的执行,但能提高代码的可读性。
摘要由CSDN通过智能技术生成

测试环境:

Windows 10
python 3.7.2
工具: Pycharm

链式调用

在学习某一个新的模块时,看到了链式调用这一操作,查找了一下资料,还真是像钟馗的钩一样,一条锁链钩五杀(开玩笑呢,不过真有这种大佬吗?)。

言归正传,链式,本质上回传的是一个对象化实例,这有点像装饰器啊!装饰器回传的是函数对象,但其实都一样的,函数是对象,类对象也是对象,没差。

所谓链式调用就是调用完一个函数后还能再继续调用其它函数,这样大大减少了代码量,尤其是项目比较大的时候,

普通调用就是对象名.函数1 … 对象名.函数2

正常调用函数,也就是单独调用函数,代码演示如下:

chain = Master()
chain.slaver1("001")
chain.slaver2("002")
.
.
.
chain.xxx("xxx")

链式调用代码演示如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# author:沐修
# content:链式调用
 
class  Master:
    def __init__(self):
        self.name = ""
 
    def slaver1(self,name):
        self.name = name
        print("名字是 %s" % name)
        return self
    def slaver2(self,name):
        self.name = name
        print("名字是 %s" % name)
        return self
    def slaver3(self,name):
        self.name = name
        print("名字是 %s" % name)
        return self
 
Master().slaver1("001").slaver2("002").slaver3("003")

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

实际上,self指的就是这个类实例化成一个对象以后,这个对象自身。而这个对象显然是有包含了类拥有的方法。返回来的自然还是原来的对象 Master()

缓存链式调用的参数

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# author:沐修
# content:缓存链式调用的关键字参数

class Master:
    def __init__(self):
        self.cache_condition = {}

    def slaver1(self, **kwargs):
        self.cache_condition.update(kwargs)
        return self

    def slaver2(self, **kwargs):
        self.cache_condition.update(kwargs)
        return self

    def slaver3(self, **kwargs):
        self.cache_condition.update(kwargs)
        return self

cache = Master().slaver1(slaver1="001").slaver2(slaver2="002").slaver3(slaver3="003")
print(cache.cache_condition)
print(cache)

运行结果:
在这里插入图片描述

Black 格式化工具与链式调用的发现

应该是我孤陋寡闻了,现在才知道链式调用,还能这么调用,直接看代码,不废话。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# author:沐修
# content:Black格式化后的链式调用

class Master:
    def __init__(self):
        self.cache_condition = {}

    def slaver1(self, **kwargs):
        self.cache_condition.update(kwargs)
        return self

    def slaver2(self, **kwargs):
        self.cache_condition.update(kwargs)
        return self

    def slaver3(self, **kwargs):
        self.cache_condition.update(kwargs)
        return self

cache =( Master()
			    .slaver1(slaver1="001")
                .slaver2(slaver2="002")
                .slaver3(slaver3="003")
)
print(cache.cache_condition)
print(cache)

运行结果:
在这里插入图片描述
看懂不,被圆括号( ) 围起来,并没有发生变化,只是提高优先级罢了,先运行哪个代码,这样的含义,但是下面的链式调用,在不同行下,可以任意更换空格的。

注意,第一行末尾的反斜杠根本不需要,因为(…)圆括号已经构成了一个逻辑行

print("test1 "
      ,"test2")

在这里已经完全不需要反斜杠\,来转义,等同于这一块代码都是一个整体,不会被分割。

所以圆括号的有趣之处,还是要记一下,方便以后能看懂,不要到时看懵了。

还有这里只是看到用Black格式化工具格式化后代码,所产生的问题,并详细介绍Black格式化工具,具体看链接,后续我可能会去尝试。

参考链接:

python链式调用

用Python实现链式调用

python 括号 中 不需要 反斜杠_如何消除反斜杠后的空白(Python3.4)

python - black介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值