Наследование типа Union в Python 3.10

Скажем, мы создаем общий тип Union под названием ResultDataв Python 3.10

      from __future__ import annotations

from dataclasses import dataclass
from typing import TypeVar, Generic, Union
from typing import _SpecialForm, _GenericAlias

@dataclass(frozen=True)
class Error:
    description: str

S = TypeVar('S')
ResultData = S | Error

Обратите внимание, что в этом случае я использую новый синтаксис Python 3.10 Union.

Затем проблема возникает при попытке наследовать класс, чтобы добавить несколько методов (например, из Монады):

      T = TypeVar('T')
class Result(ResultData[T]):
    def __init__(self):

Объявление этого класса вызывает следующую ошибку:

          class Result(ResultData[T]):
TypeError: _SpecialForm.__init__() takes 2 positional arguments but 4 were given

Похоже, что типы Union наследуются от следующих двух классов: и.

имеет 4 аргумента в качестве конструктора и только два. Я предполагаю , что _SpecialForm конструктор вызывается с использованием _GenericAlias конструктор и, следовательно, вызывает ошибку.

Я попытался исправить это с помощью следующего кода:

      T = TypeVar('T')
class Result(ResultData[T]):
    def __init__(self):
        super(_SpecialForm, self).__init__(self._getitem)
        super(_GenericAlias, self).__init__(self.origin, self.params, self.inst, self.name)

Тем не менее, я все еще получаю ту же ошибку.

0 ответов

Другие вопросы по тегам