我如何在具有`__add__`方法的类型下约束typevar?

问题描述 投票:0回答:1

我想像下面的类一样声明:

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)
python protocols typing mypy
1个回答
0
投票

约束是两个或多个具体类型,其中var类型必须准确。仅受一个约束,就没有理由首先使用var类型。您只需使用该类型即可。

在您的情况下,您希望类型变量与Additive的边界协变。

T_ADDABLE = TypeVar("T_ADDABLE", covariant=True, bound=Additive)
© www.soinside.com 2019 - 2024. All rights reserved.