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