这里写自定义目录标题
如下注释所示:
from abc import ABC,abstractmethod
class AnimalIf(ABC): # 纯抽象接口
def __init__(self) -> None:
super().__init__()
@abstractmethod
def run(self):
pass
@abstractmethod
def eat(self):
pass
class Dog(AnimalIf): #实现了抽象接口,同样的方法名,不同的实现
def __init__(self) -> None:
super().__init__()
def run(self):
print('Dog is running pretty quickly!')
return
def eat(self):
print('Dog likes eating meat!')
return
class Sheep(AnimalIf): #实现了抽象接口,同样的方法名,不同的实现
def __init__(self) -> None:
super().__init__()
def run(self):
print('Sheep runs very fast!')
def eat(self):
print('Sheep likes eating grass!')
class AnimalBehaviour():
#注意,在这里将AnimalIf作为依赖项注入进去
#通过多态的方法,保护了上层逻辑AnimalBehaviour
#即使动物有无数种变化,都不会导致AnimalBehavior的修改
def __init__(self,AnimalIf) -> None:
super().__init__()
AnimalIf.run()
AnimalIf.eat()
if __name__ =='__main__':
dog = Dog()
print('now dog is showing:')
AnimalBehaviour(dog)
print('----------------------------')
sheep = Sheep()
print('now sheep is showing:')
AnimalBehaviour(sheep)
print('----------------------------')