多态
多态是为了实现接口重用,为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性的正确调用。
python不直接支持多态,可以间接实现。
先看一个小例子:
class Animal: def __init__(self,name): self.name = name def talk(self): raise NotADirectoryError('不要调用我这里报错了') #主动抛一个错误 a = Animal('Lily') a.talk() #NotADirectoryError: 不要调用我这里报错了 #写这个的意义是定义一个接口,子类必须重构这个方法
要实现的效果 Animal.talk(实例) 调用实例里的talk方法。
先添加两个子类
class Animal: def __init__(self,name): self.name = name def talk(self): raise NotADirectoryError('不要调用我这里报错了') #主动抛一个错误 class Cat(Animal): def talk(self): return '喵' class Dog(Animal): def talk(self): return '汪' d =Dog('a') Animal.talk(d) #要实现的效果
解决方案:
class Animal: def __init__(self,name): self.name = name def talk(self): raise NotADirectoryError('不要调用我这里报错了') #主动抛一个错误 class Cat(Animal): def talk(self): return '喵' class Dog(Animal): def talk(self): return '汪' def animal_talk(obj): print(obj.talk()) d =Dog('a') c =Cat('a') animal_talk(d) #汪 animal_talk(c) #喵