这是我面临的情况。我有类A
和通用类型B
。 B的类型参数绑定到A
。
from typing import Generic, TypeVar
AT = TypeVar("AT", bound="A")
BT = TypeVar("BT", bound="B")
class A:
pass
class B(Generic[AT]):
def __init__(self, a: AT):
self._a = a
def a(self) -> AT:
return self._a
我也有一个泛型类C
,其类型参数受B
限制。我希望此类具有方法bar
,该方法给定类型为B
的对象,其返回的类型与作为参数传递的B的类型参数相同。我尝试过
class C(Generic[BT[AT]]):
def bar(self, b: BT) -> AT:
return b.a()
但是,使用mypy对以下代码进行类型检查会得到:
Returning Any from function declared to return "AT"
我也尝试过:
class C(Generic[BT]):
def bar(self, b: BT[AT]) -> AT:
return b.a()
但是我得到了错误
Type variable "BT" used with arguments
有没有一种方法可以通过类型注释来捕获这个想法,或者有一种更好的方法来构造代码来捕获这种约束?
有什么想法吗?谢谢!