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 也会自动推断 p1
是 SomeSubclass
类型,因此是 Player
。如果要显式将 p1
降级为更通用的类型,则只需添加 Player
类型提示,以便稍后可以为其分配不同的子类。
如果希望变量是实例而不是 class,则无需使用 Type
。这些都应该有效:
p1: Player = SomeSubclass()
或
p1: SomeSubclass = SomeSubclass()
或者,如果您希望 p1
成为 class 而不是实例:
p1: Type[Player] = SomeSubclass
我正在尝试使用我的类型提示进行有序的工作,以获得更容易添加的代码。
我做了以下类:
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 也会自动推断 p1
是 SomeSubclass
类型,因此是 Player
。如果要显式将 p1
降级为更通用的类型,则只需添加 Player
类型提示,以便稍后可以为其分配不同的子类。
如果希望变量是实例而不是 class,则无需使用 Type
。这些都应该有效:
p1: Player = SomeSubclass()
或
p1: SomeSubclass = SomeSubclass()
或者,如果您希望 p1
成为 class 而不是实例:
p1: Type[Player] = SomeSubclass