python - 将字段动态添加到数据类对象
问题描述
我正在编写一个库来访问 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}
解决方案
您可以使用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'}
推荐阅读
- java - 为什么这个消费者抱怨编译时错误?
- tensorflow - 在 Tensorflow 中 GPU 的工作速度比 CPU 慢,为什么?
- java - 如何在 JavaFX 中为网页加载过程制作进度条?
- javascript - 我需要在一个网页中制作多个模式
- android - 地理定位器出错:如果我在 pubspec.yaml 文件中添加 ^3.0.0,则无法构建 android 应用程序
- sql - SQL 父子和继承
- excel - Characters.FontStyle 不适用于具有自定义数字格式的单元格
- jquery - 如何在页面回发时停止 JQgrid 刷新或重新加载,并且 jggrid 应该保持不变
- ruby-on-rails - Rails:将 JSON 数据注入到无表 PORO 模型中
- django - 使用 django-s3-storage 为静态文件获取 403