1

Python 3.10で呼び出される一般的なUnion型を作成するとします。ResultData

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 型は次の 2 つのクラスから継承しているようです:_SpecialForm_GenericAlias.

_GenericAliasにはコンストラクタとして 4 つの引数がありますが、引数は_SpecialForm2 つしかありません。私の推測では、_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)

それでも、同じエラーが発生します。

4

0 に答える 0