欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 的链式调用

程序员文章站 2022-03-11 16:07:49
python 的链式调用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))输出看一...

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 - 实现链式调用

本文地址:https://blog.csdn.net/wowenlong/article/details/109059951

相关标签: python