给Python对象添加动态属性

3 投票
3 回答
7749 浏览
提问于 2025-04-16 05:08
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

上面的代码没有成功运行。有什么建议吗?

3 个回答

1
class site(object):
    pass
for k,v in dict.iteritems():
    setattr(site,k,v)
print site.a #it does works

当然可以!请提供你想要翻译的内容,我会帮你把它变得简单易懂。

5

根据文档的说法,object() 会返回一个没有任何特性的对象,也就是说它不能拥有任何属性。它没有 __dict__

你可以做的事情如下:

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

把一个 dict(字典)填充到另一个字典里,最简单的方法就是用 这个 update() 方法。所以,如果你扩展了 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

撰写回答