首页 > 解决方案 > 将字段动态添加到数据类对象

问题描述

我正在编写一个库来访问 REST API。它返回带有用户对象的 json。我将其转换为 dict,然后将其转换为数据类对象。问题是并非所有字段都是固定的。我想动态添加其他字段(未在我的数据类中指定)。我可以简单地为我的对象分配值,但它们不会出现在对象表示中,并且dataclasses.asdict函数不会将它们添加到结果字典中:

from dataclasses import asdict, dataclass

@dataclass
class X:
    i: int

x = X(i=42)
x.s = 'text'

x
# X(i=42)

x.s
# 'text'

asdict(x)
# {'i': 42}

标签: pythonpython-3.xdynamicfieldpython-dataclasses

解决方案


您可以使用make_dataclass动态创建X

X = make_dataclass('X', [('i', int), ('s', str)])
x = X(i=42, s='text')

asdict(x)
# {'i': 42, 's': 'text'}

或作为派生类:

@dataclass
class X:
    i: int

x = X(i=42)
x.__class__ = make_dataclass('Y', fields=[('s', str)], bases=(X,))
x.s = 'text'

asdict(x)
# {'i': 42, 's': 'text'}

推荐阅读