python - Python Insantiate 对象忽略其他参数
问题描述
我经常遇到这个问题:
我定义了一个 python 类,例如:
class A(object):
def __init__(self, a, b):
self.a = a
self.b = b
然后我有一些带有附加属性的数据,我需要将它们转换为这个对象。
例如data={"a": 1, "b": 2, "c": 3}
如何创建对象 A,忽略数据中的任何其他属性,使用语法(例如)A(**data)
或使用通用辅助方法(例如,toObject(A, **data)
不包括**kwargs
在我的类 A 的定义中)。
解决方案
通常,您将只能使用 hackey 方法。老实说,我想不出你为什么不能直接提供你需要的论据的任何理由。但是 Python 有很多自省/元编程能力,所以你可以把类似的东西组合在一起:
import inspect
def instantiate(cls, payload):
params = inspect.signature(cls).parameters
return cls(**{k:payload[k] for k in params})
my_a = instantiate(A, data)
但实际上,这对我来说只是主要的代码气味。
你应该只使用A(data['a'],data['b'])
推荐阅读
- c - 使用 AVL 树和单独链接的 Hashmap 的时间复杂度
- python - 在 django 中注册时尝试将用户添加到定义的组时出现错误
- windows - mac wxpython 菜单栏消失
- javascript - 尝试使用 jquery 或 javascript 将 td 值插入进度条
- c# - 如何手动下载 Unity 的 Android 构建支持?(没有统一集线器)
- javascript - 如何使用反应钩子 useState 从 API 向对象添加属性
- javascript - 从 Django 表单获取动态表单值
- android - 从前台服务打开应用程序
- sql-server - 将 DocumentFormat.OpenXml.dll 注册为 SQL Server 2019 程序集
- android - 如何减少按钮内按钮文本和图标之间的间距?