rem*_*pas 4 python generics inheritance subclass python-typing
假设我必须上课。
class A:
@staticmethod
def foo():
pass
class B(A):
pass
Run Code Online (Sandbox Code Playgroud)
我有某种函数可以根据对象的类型构造对象并调用函数。
def create(cls: Type[A]) -> A:
cls.foo()
return cls()
Run Code Online (Sandbox Code Playgroud)
现在我可以对该函数进行以下调用。因为B继承了A一切都很好。
instance_a: A = create(A)
instance_b: B = create(B)
Run Code Online (Sandbox Code Playgroud)
除了后者之外,类型检查将开始抱怨,因为create根据注释返回 的实例A。
TypeVar这可以通过如下方式解决。
from typing import Type, TypeVar
T = TypeVar('T')
def create(cls: Type[T]) -> T:
cls.foo()
return cls()
Run Code Online (Sandbox Code Playgroud)
但现在类型检查并没有完成它最初的工作,即保证cls有一个名为 的方法foo。有没有办法指定泛型为某种类型?