我想在 Python 中创建一个动态对象(在另一个对象内),然后向它添加属性。
我试过了:
obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')
但这没有用。
有任何想法吗?
编辑:
我正在从 for
循环设置属性,该循环遍历值列表,例如
params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()
for p in params:
obj.a.p # where p comes from for loop variable
在上面的例子中,我会得到 obj.a.attr1
, obj.a.attr2
, obj.a.attr3
。
我使用了 setattr
函数,因为我不知道如何从 for
循环中执行 obj.a.NAME
。
在上面的示例中,如何根据 p
的值设置属性?
有关它 为什么 不起作用的详细信息,请参阅 Can’t set attributes on instance of “object” class 。
原文由 John 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以使用我古老的 Bunch 配方,但如果你不想创建一个“bunch 类”,Python 中已经存在一个非常简单的类——所有函数都可以具有任意属性(包括 lambda 函数)。因此,以下工作:
与古老的
Bunch
配方相比,清晰度的损失是否可以,这是我当然会留给你的风格决定。