今天读源码读到这个函数的用法,它用在声明的dataclass类里面,将dataclass声明的属性变成字典返回。
有以下几点可能需要注意:
第一个是直接赋值的变量不会被asdict返回,只有声明的变量才行。
from dataclasses import asdict, dataclass
@dataclass
class Test:
a : int = 1
b = 2
def mydict(self):
print(asdict(self))
test = Test()
test.mydict()
# {'a': 1} b没有返回
第二个是,使用魔术方法__post_init__声明变量也不被asdict返回,__post_init__用于在类执行__init__后自动执行。
from dataclasses import asdict, dataclass
@dataclass
class Test:
a : int = 1
b : int = 2
def __post_init__(self):
c : int = 3
self.d = 4
def mydict(self):
print(asdict(self))
test = Test()
test.mydict()
# {'a': 1, 'b': 2} c和d都不被返回
官方doc在此:dataclasses — Data Classes — Python 3.12.6 documentation