2010-10-07 83 views
3
site = object() 
mydict = {'name': 'My Site', 'location': 'Zhengjiang'} 
for key, value in mydict.iteritems(): 
    setattr(site, key, value) 
print site.a # it doesn't work 

上述代码无效。任何建议?将动态属性添加到python对象

+0

当你说一些不起作用的信息时,会给出更多的信息,比如你想要发生什么,和/或抛出什么异常等等。 – dtlussier 2010-10-07 14:25:24

回答

7

最简单的方法来填充一个dict另一个是the update() method,所以如果你扩展object,以确保您的对象有一个__dict__你可以尝试这样的事:

>>> class Site(object): 
...  pass 
... 
>>> site = Site() 
>>> site.__dict__.update(dict) 
>>> site.a 

甚至可能是:

>>> class Site(object): 
...  def __init__(self,dict): 
...   self.__dict__.update(dict) 
... 
>>> site = Site(dict) 
>>> site.a 
1
class site(object): 
    pass 
for k,v in dict.iteritems(): 
    setattr(site,k,v) 
print site.a #it does works 
+0

'object'对象没有属性'__dict__' – mlzboy 2010-10-07 13:09:55

+0

你的解决方案可能最终会让原来的海报更混乱。在它们的原始代码中,他们想要将属性添加到作为'object'实例的对象中。但是,您提供了一种为类“site”添加属性的解决方案。我意识到它是有效的,但可能不是他们想到的。 – dtlussier 2010-10-07 14:24:18

+0

接受的解决方案也是如此,因为不可能将属性添加到“对象”实例 – leoluk 2010-10-09 00:00:34

6

As docs sayobject()收益特征的对象,这意味着它不能有任何属性。它没有__dict__

你可以做的是:

>>> site = type('A', (object,), {'a': 42}) 
>>> site.a 
42