动态将字段添加到数据类对象

时间:2018-09-27 10:02:38

标签: python python-3.x dynamic field python-dataclasses

我正在编写一个访问REST API的库。它返回带有用户对象的json。我将其转换为dict,然后将其转换为dataclass对象。问题在于,并非所有字段都是固定的。我想动态添加其他字段(在我的数据类中未指定)。我可以简单地为我的对象分配值,但是它们不会出现在对象表示中,并且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}

1 个答案:

答案 0 :(得分:3)

您可以使用make_dataclass即时创建$ pip install sortedcontainers

from sortedcontainers import SortedDict
def find_nearest(sorted_dict, lookup):
    key = sorted_dict.iloc[sorted_dict.bisect_left(lookup) - 1]
    return sorted_dict[key]

sd = SortedDict({0: '0', 4: '4', 8: '8', 12: '12'})
print(find_nearest(sd, 4))  # 0
print(find_nearest(sd, 3))  # 0
print(find_nearest(sd, 12))  # 8 

或作为派生类:

X