from dataclasses import dataclass
@dataclass
class A:
x: str
y: str
def __post_init__(self):
self.z = self.x+self.y
a = A('abc', 'def')
a.z
'abcdef'
from dataclasses import asdict
asdict(a)
{'x': 'abc', 'y': 'def'}
ご覧のとおり、z
シリアル化されていません。それをシリアル化する方法(それを呼び出す以外__dict__
)?
z
クラスを最初に定義するときに変数として含める必要がありますが、さらに、パラメーターfield
の__init__
リストからそれを省略するために使用する必要があります。
from dataclasses import dataclass, field, asdict
@dataclass
class A:
x: str
y: str
z: str = field(init=False)
def __post_init__(self):
self.z = self.x + self.y
a = A("abc", "def")
a.z
>> 'abcdef'
asdict(a)
>> {'x': 'abc', 'y': 'def', 'z': 'abcdef'}
ドキュメントに示されているように、ここで詳細を確認できます。
これは、ディクショナリを作成するための内部で、asdict
メソッド__dataclass_fields__
がオブジェクトの属性から属性をフェッチするためです。z
はこれらの属性の一部ではないためz
、オブジェクトをディクショナリに変換するときにフェッチしません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加