gpt4 book ai didi

python - 为什么我无法重写使用 `to_dict` 的 `dataclass` 对象的 `dataclasses_json` 方法?

转载 作者:行者123 更新时间:2023-11-30 21:52:31 25 4
gpt4 key购买 nike

dataclasses_json是一个为 python 的数据类提供 JSON 功能的库。我注意到重写 to_dict 方法没有效果。这是一个例子:

@dataclass_json
@dataclass
class Message2:
message: str
weight: int
def to_dict(self, encode_json=False):
print('Custom to_dict')
ret = {'MESSAGE': self.message, 'WEIGHT': self.weight}
return ret
m2 = Message2('m2', 2)
print(m2.to_dict())

代码打印以下内容:

{'消息':'m2','重量':2}

在我期待的时候

Custom to_dict
{'MESSAGE': 'm2', 'WEIGHT': 2}

如果删除 @dataclass_json 行,我会得到所需的输出。

所以,我的问题是:

  1. 为什么使用 @dataclass_json 定义函数没有效果,但没有它却可以工作?

  2. 如何覆盖 to_dict 并使用 @dataclass_json

最佳答案

  1. 因为 dataclass_json 只是覆盖了您的 to_dict 方法 here :
    cls.to_dict = DataClassJsonMixin.to_dict
  • 一种可能的方法是定义一个具有不同名称的方法,并在应用 dataclass_json 装饰器后使用此方法创建 to_dict 方法。带装饰器的完整示例:
  • from dataclasses import dataclass
    from dataclasses_json import dataclass_json


    def recover_to_dict(cls):
    if hasattr(cls, '_to_dict'):
    setattr(cls, 'to_dict', getattr(cls, '_to_dict'))
    return cls


    @recover_to_dict
    @dataclass_json
    @dataclass
    class Message2:
    message: str
    weight: int
    def _to_dict(self, encode_json=False):
    print('Custom to_dict')
    ret = {'MESSAGE': self.message, 'WEIGHT': self.weight}
    return ret
    m2 = Message2('m2', 2)
    print(m2.to_dict())

    关于python - 为什么我无法重写使用 `to_dict` 的 `dataclass` 对象的 `dataclasses_json` 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882545/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com