将动态属性添加到python对象

mlz*_*boy 3 python properties add dynamic

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
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.有什么建议吗?

Dav*_*ebb 7

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

>>> class Site(object):
...     pass
...
>>> site = Site()
>>> site.__dict__.update(dict)
>>> site.a
Run Code Online (Sandbox Code Playgroud)

或者甚至可能:

>>> class Site(object):
...     def __init__(self,dict):
...         self.__dict__.update(dict)
...
>>> site = Site(dict)
>>> site.a
Run Code Online (Sandbox Code Playgroud)


Sil*_*ost 5

正如文档所说,object()返回无特征对象,意味着它不具有任何属性.它没有__dict__.

你能做的是以下几点:

>>> site = type('A', (object,), {'a': 42})
>>> site.a
42
Run Code Online (Sandbox Code Playgroud)