你可以给TypeVar提供类型参数吗

时间:2020-05-08 03:47:33

标签: python python-3.x type-hinting mypy

这是我面临的情况。我有类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

有没有一种方法可以通过类型注释来捕获这个想法,或者有一种更好的方法来构造代码来捕获这种约束?

有什么想法吗?谢谢!

0 个答案:

没有答案