数据类的字典返回空字典。

3

我刚接触 dataclasses,正在尝试创建一种简单的方法将其转换为字典,以便可以保存和从 JSON 文件中加载。在实现应用程序所需的基础设施之前,我正在使用下面的变量测试一个小的 dataclass:

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())

两个打印语句都是一个空字典'{}',我似乎无法找出原因


你没有做任何注释,而是实现了自己的初始化。 - undefined
1个回答

7

通过重写__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())

这将产生以下输出:

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

请查看文档获取详细信息。


谢谢。由于某种原因,我错过了文档的那部分内容。 - undefined
2
你可以添加自己的__init__方法,但是你仍然需要将dataclass字段声明为类变量,以便它们被识别。示例:https://www.python.org/dev/peps/pep-0557/#custom-init-method - undefined
最近的Python版本(如3.10)还能正常工作吗?我得到了一个空字典。 - undefined
这个答案中的代码在 Python 3.10 下运行时并不会生成一个空的 dict。如果我将代码复制粘贴到一个名为 testcode.py 的文件中,并使用 Python 3.10.4 运行 python testcode.py,它会产生答案中所示的输出。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接