Python 数据类的post_init方法中定义的变量是否可以序列化?
可以看出,Python 数据类的post_init方法中定义的变量是否可以序列化?,python,python-dataclasses,Python,Python Dataclasses,可以看出,z没有被序列化。如何序列化它(除了在它上面调用\uuuu dict\uuuu)在第一次定义类时,需要将z作为一个变量,但另外,还需要使用字段将其从\uu init\uuuu参数列表中省略 a = A('abc', 'def') a.z 'abcdef' from dataclasses import asdict asdict(a) {'x': 'abc', 'y': 'def'} 您可以在文档中看到更多信息 这是因为在创建字典的过程中,asdict方法从对象的\uuuu datac
z
没有被序列化。如何序列化它(除了在它上面调用\uuuu dict\uuuu
)在第一次定义类时,需要将z
作为一个变量,但另外,还需要使用字段
将其从\uu init\uuuu
参数列表中省略
a = A('abc', 'def')
a.z
'abcdef'
from dataclasses import asdict
asdict(a)
{'x': 'abc', 'y': 'def'}
您可以在文档中看到更多信息
这是因为在创建字典的过程中,
asdict
方法从对象的\uuuu dataclass\u fields\uuu
属性获取属性。由于z
不是这些属性的一部分,因此在将对象转换为字典时,它不会获取z
。您是否尝试过:b=pickle.load(pickle.dumps(a))
?看来z
正在通过序列化来实现。它不是\uuu str\uu
函数的一部分。或者我误解了你的问题。我的错,漏了一行。
a = A('abc', 'def')
a.z
'abcdef'
from dataclasses import asdict
asdict(a)
{'x': 'abc', 'y': 'def'}
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'}