用户定义的对象作为Python中函数指定的参数类型

时间:2018-10-17 13:45:48

标签: python function class oop parameter-passing

我在Python3中定义了类Player,现在我试图在另一个类中定义一个将对象类型Player作为参数的方法,因此代码如下所示:

def change_player_activity(self, player: Player):
    pass

但这给我一个错误。我知道我可以执行以下操作:

if not isinstance(player,Player):
        raise TypeError

但是我只是想知道,是否有任何内置的方式告诉Python3只接受给定类的对象?

1 个答案:

答案 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,因为这种事情很痛苦。