一个抽象类定义了执行它的方法/模板和一些抽象的步骤,子类只需要实现这些步骤。

意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

Demo


  1. """
  2. 模板方法
  3. """
  4. from abc import ABCMeta, abstractmethod
  5. class Game(metaclass=ABCMeta):
  6. @abstractmethod
  7. def initialize(self):
  8. pass
  9. @abstractmethod
  10. def start(self):
  11. pass
  12. @abstractmethod
  13. def end(self):
  14. pass
  15. def play(self):
  16. self.initialize()
  17. self.start()
  18. self.end()
  19. class AGame(Game):
  20. def start(self):
  21. print(f"{self.__class__}: start")
  22. def initialize(self):
  23. print(f"{self.__class__}: initialize")
  24. def end(self):
  25. print(f"{self.__class__}: end")
  26. class BGame(Game):
  27. def start(self):
  28. print(f"{self.__class__}: start")
  29. def initialize(self):
  30. print(f"{self.__class__}: initialize")
  31. def end(self):
  32. print(f"{self.__class__}: end")
  33. if __name__ == '__main__':
  34. a_game = AGame()
  35. a_game.play()