栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录
  • 链式调用
  • 缓存链式调用的参数
  • Black 格式化工具与链式调用的发现

测试环境:

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介绍

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号