我想在Python中创建一个动态对象(在另一个对象内),然后为其添加属性.
我试过了:
obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')
Run Code Online (Sandbox Code Playgroud)
但这没用.
有任何想法吗?
编辑:
我从for循环中设置属性,循环遍历值列表,例如
params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()
for p in params:
obj.a.p # where p comes from for loop variable
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我会得到obj.a.attr1,obj.a.attr2,obj.a.attr3.
我使用了这个setattr函数因为我不知道怎么做obj.a.NAME一个for循环.
如何根据p上面示例中的值设置属性?
所以,我在回答这个问题时正在玩Python ,我发现这是无效的:
o = object()
o.attr = 'hello'
Run Code Online (Sandbox Code Playgroud)
由于AttributeError: 'object' object has no attribute 'attr'.但是,对于从object继承的任何类,它是有效的:
class Sub(object):
pass
s = Sub()
s.attr = 'hello'
Run Code Online (Sandbox Code Playgroud)
打印s.attr按预期显示"你好".为什么会这样?Python语言规范中的内容指定您不能将属性分配给vanilla对象?
当我需要具有不同属性的多个对象时,我可以使用它:
class struct(object):
def __init__(self,*args,**kwargs):
for key,val in kwargs.items():
setattr(self,key,val)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否已经没有内置?