Я не могу заставить работать общий тип.Я подкласс класса Deque.Каждый элемент Deque будет экземпляром SomeNamedTuple.
from typing import NamedTuple, Deque, TypeVar
class SomeNamedTuple(NamedTuple):
field1: int
field2: str
T = TypeVar("T", bound=NamedTuple)
class SomeDeque(Deque[T]):
def some_method(self) -> None:
if self:
print(self[0]._fields)
mydeque = SomeDeque[SomeNamedTuple]()
$ mypy --strict foo.py
foo.py:14: error: Value of type variable "T" of "SomeDeque" cannot be "SomeNamedTuple"
Я вставил некоторую отладку в mypy / applytype.py, где генерируется ошибка:
upper_bound = callable.variables[i].upper_bound
if not mypy.subtypes.is_subtype(type, upper_bound):
if skip_unsatisfied:
types[i] = None
else:
print(f'type = {type}')
print(f'upper_bound = {upper_bound}')
msg.incompatible_typevar_value(callable, type, callable.variables[i].name, context)
и похоже, что он думает, что тип является Tuple (не NamedTuple):
$ mypy --strict foo.py
type = Tuple[builtins.int, builtins.str, fallback=foo.SomeNamedTuple]
upper_bound = typing.NamedTuple
foo.py:14: error: Value of type variable "T" of "SomeDeque" cannot be "SomeNamedTuple"
Что я делаю не так?