python 的链式调用

本文介绍了Python中链式调用的概念,通过示例展示了如何创建具有链式调用功能的类。讨论了返回self的重要性,以及为何不能在类中使用与函数同名的变量。同时提醒开发者注意避免覆盖类的方法。最后,提供了一种更规范的链式调用实现方式。
摘要由CSDN通过智能技术生成
python 的链式调用

关键是每个函数末尾返回自己,return self

class Person:
    def name(self, name):
        self.name = name
        return self
        

    def age(self, age):
        self.age = age
        return self


    def show(self):
        print("name:{}, age:{}".format(self.name, self.age))

输出看一下
p = Person()
p.name("along").age(11).show()
另一种写法
(
    p.name("along")
        .age(11)
        .show()
)
结果
name:along, age:11
----------------分割线--------------------

继续思考:为什么返回self就可以呢?
在函数里面尝试打印self

class Person:
    def name(self, name):
        print(self)

输出

<__main__.Person object at 0x000001A149810710>

所以这里就是类对象啊。对象本身当然可以一直点(调用)下去。

在参考文章1的评论中yoshubom解释到:Python 是弱类型语言,name 第一次赋值之后第二次就不能调用了。还是改成这样比较好。

class Person:
    def setName(self, name):
        self.name = name
        return self
 
    def setAge(self, age):
        self.age = age
        return self
 
    def show(self):
        print("My name is", self.name, "and I am", self.age, "years old.")
 
 
if __name__ == "__main__":
    p = Person()
    p.setName("Li Lei").setAge(15).show()
    p.setName("ABC").setAge(15).show()

这里也正解释了为什么不能和函数同名, 这是因为 self=p=Person object at 0x000001A149810710,所以第一次self.name="Li Lei"的话就把name函数给覆盖了,所以一定要注意啊!!!!!

参考文章1:飘逸的python - 实现链式调用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值