在Python 3.5中,我想在返回类的新实例的类方法上使用类型提示。
例如,我有以下两个类:
class A:
@classmethod
def new_thing(cls):
return cls()
class B(A):
pass
我想向new_thing
添加一个类型提示,以指定它返回它所调用的类的实例。
我找到的最接近的解决方案是使用TypeVar
,例如:
from typing import Type, TypeVar
T = TypeVar('T')
class A:
@classmethod
def new_thing(cls: Type[T]) -> T:
return cls()
但是,这并不表示对cls
类型的任何限制,而cls
应该始终是A
或其子类之一的实例(即,#&} 39;没有任何暗示cls
应该在这里可以调用。)
有没有办法实现这个目标? TypeVar
有一个bound
参数,所以首先想到的是:
T = TypeVar('T', bound=A)
但这不起作用,因为A
在宣布TypeVar
时未定义(如果没有{{我不能宣布A
首先定义{1}}。