各dataclassで共通のフィールドがほしい、でもデフォルトの値を付けたいから普通に継承すると前にこれがついてtypeerror。つらいさんなのだ
だめ
from dataclasses import dataclass
@dataclass
class Base:
base: int = 10
@dataclass
class Extend(Base):
extend: int
typeerrorです
あと、@dataclass
していないclassを継承しても継承元のフィールドは(__init__には)継承しないみたい。
正直読みにくいけどまあ解決
デコレータを書きます
from dataclasses import dataclass
def add(c):
@dataclass
class wrap(c):
added: int = 10
return wrap
@add
@dataclass
class DataClass:
field: str
欠点としては、インタプリタで名前じゃなくて<locals>.wrap
になることですね
>> DataClass
<class '__main__.add.<locals>.wrap'>
追記
どうやらclassの名前は__qualname__
にあるらしい。
def add(c):
@dataclass
class wrap(c):
added: int = 10
__qualname__ = c.__qualname__
return wrap
>> DataClass
<class '__main__.DataClass'>