来自数据类的字典返回空字典

Fal*_*ard 1 python dictionary python-dataclasses

我是数据类的新手,正在尝试制作一种简单的方法将一个转换为字典,然后我可以从 JSON 文件中保存和加载。在实现应用程序所需的基础结构之前,我正在一个小型数据类上对其进行测试,其中包含我将使用的变量,如下所示:

from dataclasses import dataclass, asdict
@dataclass 
class TestClass:
    def __init__(self, floatA:[float], intA:[int], floatB:[float]):
        self.var1 = floatA
        self.var2 = intA
        self.var3 = floatB

    def ConvertToDict(self):
        return asdict(self)

test = TestClass([0.2,0.1,0.5], [1,2,3], [0.9,0.7,0.6])
print(asdict(test))
print(test.ConvertToDict())
Run Code Online (Sandbox Code Playgroud)

两个打印语句都是一个空字典“{}”,我似乎无法弄清楚为什么

lar*_*sks 6

通过覆盖该__init__方法,您可以有效地使dataclass装饰器成为无操作。我想你想要:

from dataclasses import dataclass, asdict
@dataclass 
class TestClass:
    floatA: float
    intA: int
    floatB: float

    def asdict(self):
        return asdict(self)

test = TestClass([0.2,0.1,0.5], [1,2,3], [0.9,0.7,0.6])
print(test)
print(test.asdict())
Run Code Online (Sandbox Code Playgroud)

产生作为输出:

TestClass(floatA=[0.2, 0.1, 0.5], intA=[1, 2, 3], floatB=[0.9, 0.7, 0.6])
{'floatA': [0.2, 0.1, 0.5], 'intA': [1, 2, 3], 'floatB': [0.9, 0.7, 0.6]}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档

  • 您可以添加自己的 __init__ 方法,但仍然需要将数据类字段声明为类变量才能识别它们。示例:https://www.python.org/dev/peps/pep-0557/#custom-init-method (2认同)