我想在Python中创建一个动态对象(在另一个对象内部),然后向其添加属性。
我试着:
obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')
但这并不奏效。
什么好主意吗?
编辑:
我设置的属性从一个循环通过一个值的列表,例如。
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值设置属性?
有关为什么它不起作用的详细信息,请参见不能在“object”类的实例上设置属性。
试试下面的代码:
$ python
>>> class Container(object):
... pass
...
>>> x = Container()
>>> x.a = 10
>>> x.b = 20
>>> x.banana = 100
>>> x.a, x.b, x.banana
(10, 20, 100)
>>> dir(x)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'a', 'b', 'banana']
试试下面的代码:
$ python
>>> class Container(object):
... pass
...
>>> x = Container()
>>> x.a = 10
>>> x.b = 20
>>> x.banana = 100
>>> x.a, x.b, x.banana
(10, 20, 100)
>>> dir(x)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'a', 'b', 'banana']