Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据类的post_init方法中定义的变量是否可以序列化?_Python_Python Dataclasses - Fatal编程技术网

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'}