多态
一种接口,多种实现
最初我们写类是这样调用的
class Animal(object): def __init__(self, name): self.name = name def talk(self): pass class Cat(Animal): def talk(self): print('Meow!') class Dog(Animal): def talk(self): print('Woof! Woof!') d = Dog("杰克") d.talk() c = Cat("叶良辰") c.talk()
结果:
Woof! Woof!
Meow!
这样也是一种多态
class Animal(object): def __init__(self, name): self.name = name def talk(self): pass class Cat(Animal): def talk(self): print('Meow!') class Dog(Animal): def talk(self): print('Woof! Woof!') def animal_talk(obj): obj.talk() d = Dog("杰克") c = Cat("叶良辰") animal_talk(c) animal_talk(d)
结果:
Meow!
Woof! Woof!
最终的多态
class Animal(object): def __init__(self, name): self.name = name def talk(self): pass @staticmethod # 静态方法 def animal_talk(obj): # 静态方法下这里不需要self obj.talk() class Cat(Animal): def talk(self): print('Meow!') class Dog(Animal): def talk(self): print('Woof! Woof!') d = Dog("杰克") c = Cat("叶良辰") Animal.animal_talk(c) # 调用了Animal下的 animal_talk方法,将c传给,animal_talk又调用了Dog下的talk(),相当于c.talk() Animal.animal_talk(d)
结果:
Meow!
Woof! Woof!
练习题
class Parent(): def func(self): print("in parent func") def __init__(self): self.func() class Son(Parent): def func(self): print("in son func") s = Son()
结果:
in son func