Код: Выделить всё
from typing import Protocol, TypeVar
class A: pass
class B(A): pass
class C(A): pass
T = TypeVar("T", B, C, contravariant=True)
class X(Protocol[T]):
def f(self, t: T) -> None: ...
class XTImpl(X[T]):
def f(self, t: T) -> None: pass
class XBImpl(X[B]):
def f(self, t: B) -> None: pass
Мое истинное использование Дело в том, что у меня есть функции
Код: Выделить всё
def fB(x: type[X[B]]): ...
def fC(x: type[X[C]]): ...
def fT(x):
fB(x)
fC(x)
Мне, например, нужно что-то вроде просто X (для чего я получаю ошибка «Ожидаемые аргументы типа для универсального класса»).
Если мы изменили T = TypeVar("T", B, C, contravariant=True) на T = TypeVar( "T", A, contravariant=True), то мы могли бы просто использовать X[A].
Но в моем истинном случае использования B и C не являются прямыми потомками общего предка.
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/787 ... onstraints