如何解决在 Python 中使用泛型动态键入子类
假设我必须听课。
class A:
@staticmethod
def foo():
pass
class B(A):
pass
而且我有某种函数可以根据它的类型构造一个对象并调用一个函数。
def create(cls: Type[A]) -> A:
cls.foo()
return cls()
现在我可以对该函数进行以下调用。而且因为 B
继承自 A
,所以一切都很好。
instance_a: A = create(A)
instance_b: B = create(B)
除了后者,类型检查会开始报错,因为 create
根据注解返回一个 A
的实例。
这可以通过 TypeVar
解决,如下所示。
from typing import Type,TypeVar
T = TypeVar('T')
def create(cls: Type[T]) -> T:
cls.foo()
return cls()
除了现在打字检查不能保证 cls
有一个名为 foo
的方法的原始工作。有没有办法将泛型指定为某种类型?
解决方法
T = TypeVar('T',bound=A)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。