类引用的类型提示是什么?

6

我正在查看PEP 484,但找不到如何对类引用进行类型提示的描述。类引用是否声明为如下所示的可调用类型呢?

from typing import Callable

class SomeClass:
    def __init__(self):
        self.s = 'Hello'

    def display(self):
        print(self.s)

x: Callable[[], SomeClass] = SomeClass

instance = x()
instance.display()
1个回答

12

如果您只关心x是一个类,那么您只需要使用type(或其他适当的元类)。

x: type = SomeClass

如果 x 应该是 SomeClass 或其子类之一,使用 typing.Type

x: typing.Type[SomeClass] = SomeClass

如果 x 必须确切地SomeClass(无论何种原因),我认为 typing.TypeVar 是适当的选择。

x: typing.TypeVar('SomeClass', SomeClass) = SomeClass

5
您的前两个示例是完全正确的。然而,您第三个示例实际上不符合PEP-484标准:TypeVar(...)并不是一个有效的类型,更像是一个“类型构造函数”,用于创建类型变量(这是一个有效的类型!)。因此,您应该使用 T = TypeVar('T')T = TypeVar('T', bound=SomeClass) 然后将 T 用作类型提示 - 但仅在泛型相对于 T 的函数或类中使用。因此,诸如 x: Type[T] = SomeClass 这样的东西实际上并不太有用:T 需要始终绑定到确切的 SomeClass,那么在这种情况下,您可能不需要费心使用泛型。 - Michael0x2a

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接