python中,类的属性不仅可以是变量,还可以是方法,并且还支持在类内先声明而不具体实现,在类外部实现并给属性赋值(实现具体方法)。
例子如下:
这里People类中除了name、age两个变量属性,还有introduce这个方法属性。
在speech方法中,还调用了introduce方法。但introduce方法并没有在类内部实现,而是在类外实现say_hello()函数,通过赋值的方式传给People类的introduce属性。
class People():
def __init__(self, name, age):
self.name = name
self.age = age
self.introduce = None
def speech(self):
if self.introduce is not None:
self.introduce(self.name, self.age)
print('Today my topic is ......')
def say_hello(name, age):
print('Hello, my name is {}, and I am {} years old.'.format(name, age))
if __name__ == '__main__':
doudou = People('doudou', 23)
doudou.introduce = say_hello
doudou.speech()
运行结果为
Hello, my name is doudou, and I am 23 years old.
Today my topic is ......