我在Python3中定义了类Player,现在我试图在另一个类中定义一个将对象类型Player作为参数的方法,因此代码如下所示:
def change_player_activity(self, player: Player):
pass
但这给我一个错误。我知道我可以执行以下操作:
if not isinstance(player,Player):
raise TypeError
但是我只是想知道,是否有任何内置的方式告诉Python3只接受给定类的对象?
答案 0 :(得分:2)
是否存在任何内置方法来告诉Python3接受给定类的对象?
否。
这并不存在,也不会有用,因为Python依赖于Duck Typing的原理。如果它看起来像Player
,而嘎嘎声像Player
,则将其视为播放器。否则,raise TypeError
。
仅当您要求对象执行TypeError
应该执行的操作而它不能执行此操作时,才应该抬起Player
。如果有人想将自己的Player
类的实例传递给您的函数,该怎么办?那样就行不通了。
回到您的实际问题:您想在定义Player
之前键入Player
的提示。这样做的方法是在类型提示中write "Player"
instead of Player
:
def change_player_activity(self, player: "Player"):
pass
在__future__
(双关语)中,Python开发人员计划将其制作为not try to look up type hints straight away,因为这种事情很痛苦。