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

Toa*_*ter 5 python python-3.x python-typing

我正在查看PEP 484,但找不到有关如何键入提示类引用的说明。类引用是否声明为 Callables,如下所示?

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()
Run Code Online (Sandbox Code Playgroud)

谢谢!

che*_*ner 7

如果您只关心它x一个类,则只需使用type(或其他一些适当的元类)。

x: type = SomeClass
Run Code Online (Sandbox Code Playgroud)

如果x应该是SomeClass或其后代之一,请使用typing.Type

x: typing.Type[SomeClass] = SomeClass
Run Code Online (Sandbox Code Playgroud)

如果x必须完全正确 SomeClass(无论出于何种原因),我认为typing.TypeVar是合适的选择。

x: typing.TypeVar('SomeClass', SomeClass) = SomeClass
Run Code Online (Sandbox Code Playgroud)

  • 你的前两个例子是绝对正确的。但是,您的第三个示例实际上并不符合 PEP-484:`TypeVar(...)` 不是有效类型,更多的是您用来创建类型变量的“类型构造函数”(*是* 有效类型!)。因此,您可以执行“T = TypeVar('T')”或“T = TypeVar('T',bound=SomeClass)”,然后使用“T”作为类型提示——但仅限于通用函数或类中关于“T”。因此,像“x: Type[T] = SomeClass”这样的东西实际上并不太有用:“T”需要始终准确地绑定到“SomeClass”,此时您最好不要为泛型而烦恼。 (3认同)