Python中子类的Typehint

问题描述 投票:1回答:1

我正在尝试根据我的类型提示进行有条理的工作,以使代码更易于添加。

我参加了以下课程:

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

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

p1: Type[Player] = SomeSubclass()

在最后一行中,PyCharm出现了预期的类型错误:

预期类型'Type [Player]'改为'SomeSubclass'

我使用错误的Typehint还是缺少其他内容?

python pycharm python-typing
1个回答
1
投票

[仅在键入类型时才需要使用Type[X]类型声明(这是不常见的情况-例如,如果您有一个采用类型而不是对象实例的工厂函数,作为其参数)。要输入对象,只需使用对象的类型:

p1: Player = SomeSubclass()

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

© www.soinside.com 2019 - 2024. All rights reserved.