如何解决将TypeVar上限设置为随后定义的类
我正在查看typeshed
的来源,发现它在pathlib.pyi
中执行以下操作:
_P = TypeVar('_P',bound=PurePath)
...
class PurePath(_PurePathBase): ...
对于基类,我有一个类似的情况,该基类从__new__
返回一个子类(类似于Path
),因此类型注释也将相似。但是,为下面定义的类定义bound
关键字会解析为 NameError ,因为名称尚未解析(正如我所期望的那样;由于{{ 1}}源。
typeshed
from abc import ABC
from typing import Type
from typing import TypeVar
from foo.interface import SomeInterface
_MT = TypeVar('_MT',bound=MyBaseClass)
class MyBaseClass(SomeInterface,ABC):
def __new__(cls: Type[_MT],var: int = 0) -> _MT:
if var == 1:
return object.__new__(FirstSubClass)
return object.__new__(cls)
class FirstSubClass(MyBaseClass): pass
如何摆脱困境?这对我的打字非常理想,否则我必须这样做:
typeshed
我所有的短毛猫警告都得到了满足(_MT = TypeVar('_MT',covariant=True,bound=SomeInterface)
)...
比较合适的情况是typing a factory method,因为我将"expected type _MT,got object instead"
作为工厂使用,类似于__new__
的工作方式,并且如上所述here。不过,很高兴知道Path
如何在不使用字符串的情况下完成对typeshed
的前向引用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。