如何使用NamedTuple子类作为从Dequ继承的泛型类的项类型

2024-03-28 20:50:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法让泛型类型工作。我是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中进行了一些调试/应用类型.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):

$ 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"

我做错什么了?你知道吗


Tags: ofpyself类型iffootypenamedtuple