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