Вот ситуация, с которой я столкнулся. У меня есть класс A
и общий c тип 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 class 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
Есть ли способ зафиксировать эту идею с помощью аннотации типа или лучший способ структурировать код для фиксации этого ограничения?
Есть идеи по этому поводу? Спасибо!