Python 中子类的类型提示

Typehint for subclasses in Python

我正在尝试使用我的类型提示进行有序的工作,以获得更容易添加的代码。

我做了以下类:

class Player(ABC)
    @abstractmethod
    def some_function():
        pass

class SomeSubclass(Player):
    def some_function():
        #some meaningfull code
        pass

p1: Type[Player] = SomeSubclass()

在最后一行,我得到了预期的类型错误 PyCharm:

Expected Type 'Type[Player]' got 'SomeSubclass' instead

我是否使用了错误的 Typehint 或我遗漏了什么?

如果您正在键入一个类型,您只需要使用 Type[X] 类型声明(这不是一种常见的情况——例如,如果您有一个接受类型的工厂函数,而不是而不是一个对象实例,作为它的参数)。要键入对象,只需使用对象的类型:

p1: Player = SomeSubclass()

请注意,即使没有类型提示,mypy 也会自动推断 p1SomeSubclass 类型,因此是 Player。如果要显式将 p1 降级为更通用的类型,则只需添加 Player 类型提示,以便稍后可以为其分配不同的子类。

如果希望变量是实例而不是 class,则无需使用 Type。这些都应该有效:

p1: Player = SomeSubclass()

p1: SomeSubclass = SomeSubclass()

或者,如果您希望 p1 成为 class 而不是实例:

p1: Type[Player] = SomeSubclass