当我导入的python模块被导入时,我想根据同一模块中定义的字典的内容为模块创建一组属性。以下是模块中字典的一小部分:
list_of_constellations = {
0: Constellation("And", "Andromeda"),
1: Constellation("Ant", "Antlia"),
2: Constellation("Aps", "Apus"),
3: Constellation("Aql", "Aquila"),
}
Constellation是一个名字元组。我想要的是将一组新属性注入名称空间,该名称空间的名称是元组中的第一个元素,其值是键。因此,导入后,可以使用以下属性:
import constellations
print constellations.And # prints 0
print constellations.Ant # prints 1
我该怎么做?
答案 0 :(得分:2)
在模块本身中,globals()
函数将模块名称空间作为字典返回;只需使用每个命名元组的第一个元素作为设置整数值的键:
for key, const in list_of_constellations.items():
globals()[const[0]] = v # set "And" to 0, etc.
或从模块外部,使用setattr()
向模块添加属性:
import constellations
for key, const in constellations.list_of_constellations.items():
setattr(constellations, constellation[0], v) # set "And" to 0, etc.
答案 1 :(得分:0)
在Python 2.7中:
>>> import constellations
>>> dir(constellations)
['Constellation', 'list_of_constellations', 'namedtuple', 'namespace', ...]
>>> for key, tupl in constellations.list_of_constellations.iteritems():
>>> setattr(constellations, tupl[0], key)
>>> dir(constellations)
['And', 'Ant', 'Aps', 'Aql', 'Constellation', 'list_of_constellations',
'namedtuple', 'namespace', ...]
对于Python3,将iteritems()
替换为items()
。
您可以单独使用vars(constellations).update(dict)
覆盖设置属性,其中dict
是包含要以name:value格式插入的属性的字典对象。