class PlayerMixin:
pass
class HumanPlayer(PlayerMixin):
pass
class AIPlayer(PlayerMixin):
pass
def play_game(player1: PlayerMixin, player2: PlayerMixin)
pass
from abc import ABC, abstractmethod
class Player(ABC):
def something_common(self):
# do something common
@abstractmethod
def play(self):
"""Players must implement their specific play style."""
raise NotImplementedError
...
class HumanPlayer(Player):
def play(self):
# play humanely
def care_for_bodily_needs(self):
# take a break
一种解决方案是为这两个类添加一个公共祖先,并将其用作类型提示:
直截了当的答案是使用
typing.Union
和提示反对:但是,这意味着传递的对象可能具有任何类的特征。只要两个类实现同一个接口,这就无关紧要了。但仅仅按照惯例很难使两个类保持同步,所以您应该考虑一种正式的方法,通过使用共享父类来帮助实现这一过程。在这方面^{} 非常有用:
现在您可以安全地提示
Player
及其定义良好的接口。如果HumanPlayer
或IAPlayer
实现了另一个没有实现的东西,那么它将不会包含在Player
接口中,因此无法在函数play_game
中安全使用,从而使代码类型安全相关问题 更多 >
编程相关推荐