如何解决Python 类型:注释父类返回子类类型对象的最佳方法
class BaseClass:
@classmethod
def create(cls,arg1: str) -> BaseClass:
instance = cls(arg1)
return instance
还有一个像这样的派生类:
class DerivedClass(BaseClass):
def __init__(self,arg: str) -> None:
self.arg = arg
现在当我这样做
data: DerivedClass = DerivedClass.create('first arg)
mypy 给出以下错误:
"BaseClass" cannot be assigned to declared type "DerivedClass"
"BaseClass" is incompatible with "DerivedClass"
我的解决方法是使用 typing.cast
data: DerivedClass = cast(
DerivedClass,DerivedClass.get(derived_class_instance)
)
如果不使用typing.cast
,我该如何解决
解决方法
您可以将 BaseClass
更改为:
T = TypeVar("T")
from typing import TypeVar,Type
class BaseClass:
@classmethod
def get(cls: Type[T],instance: T) -> T:
return instance
这会强制 instance
属于调用 get
类方法的类型。所以 BaseClass.get
接受一个 BaseClass
并返回一个 BaseClass
,而 DerivedClass.get
接受一个 DerivedClass
并返回一个 DerivedClass
。运行 mypy
结果:
Success: no issues found in 1 source file
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。