0
点赞
收藏
分享

微信扫一扫

用python实现面向接口编程和依赖注入

那小那小 2022-03-12 阅读 102

这里写自定义目录标题


如下注释所示:

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('----------------------------')

举报

相关推荐

0 条评论