Python类型提示-尚未定义的类型

4
如何为类的替代构造函数提供类型提示?例如,如果我有一个像这样将某个东西转换成我的新类的方法,
class MyClass:
    @classmethod
    def from_string(cl: Type[????], s: str) -> ????:
        p, q = some_function(s)
        return cl(p, q)

我应该为????写什么?它本质上应该只是MyClass,但在执行方法定义时,该变量尚未定义。

1个回答

4
正如 PEP484 规定的那样,您可以使用字符串作为提示,在类型提示读取时相应的类型未定义,但稍后将可用。这包括将字符串用作类型提示的一部分。因此,您的代码将简单地阅读:
class MyClass:
    @classmethod
    def from_string(cl: Type['MyClass'], s: str) -> 'MyClass':
        p, q = some_function(s)
        return cl(p, q)

但实际上,如果你的cl不是MyClass,返回值将会不同,因此最好使用类型变量,像这样:

ParametersT = TypeVar("ParametersT", bound="Parameters")
class Parameters (
        NamedTuple("Parameters", [
            ("n_steps", halfyears),
        ])):
    @staticmethod
    def from_ns(ns: Namespace) -> 'Parameters':
        return Parameters(**vars(ns))

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