我想像下面的类一样声明:
class Foo(Generic[T_ADDABLE]):
def __init__(self, a: T_ADDABLE):
self.a = a
def bar(self, b: T_ADDABLE) -> T_ADDABLE:
print(a, b)
return self.a + self.b # a and b must be addable.
所以我想用具有T_ADDABLE
方法的类型来约束__add__
,但是我该怎么做呢?
我尝试了以下代码,但我的短毛猫说A single constraint to TypeVar is not allowed.
from typing_extensions import Protocol
class Additive(Protocol):
def __add___(self, x, y):
...
T_ADDABLE = TypeVar("T_ADDABLE", Additive)
约束是两个或多个具体类型,其中var类型必须准确。仅受一个约束,就没有理由首先使用var类型。您只需使用该类型即可。
在您的情况下,您希望类型变量与Additive
的边界协变。
T_ADDABLE = TypeVar("T_ADDABLE", covariant=True, bound=Additive)