Можете ли вы передать аргумент типа TypeVar - PullRequest
1 голос
/ 08 мая 2020

Вот ситуация, с которой я столкнулся. У меня есть класс 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

Есть ли способ зафиксировать эту идею с помощью аннотации типа или лучший способ структурировать код для фиксации этого ограничения?

Есть идеи по этому поводу? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...