我有一个变量层次结构,比如
a.b.c.d1
a.b.c.d2
a.b.c.d3
a.b.c.d4
现在我希望将它们全部放入本地命名空间:
d1=2
d2=3
...
我该如何实现?
答案 0 :(得分:2)
你实际上可以用类似dict的方式访问Python中对象的所有字段,只要它是一个新式的类,即该类直接或间接地继承object
。
让我们将层次结构降低到一个级别,就像@unutbu提议的那样。然后解决方案是:
class A(object):
d0 = 0
def __init__(self):
self.d1 = 1
self.d2 = 2
self.d3 = 3
self.d4 = 4
a = A()
for k in a.__dict__:
print k, a.__dict__[k]
globals()[k] = a.__dict__[k]
print d1, d2, d3, d4
print d0
这给了我们作为输出:
d4 4
d2 2
d3 3
d1 1
1 2 3 4
Traceback (most recent call last):
File "/../stackoverflow/14267654.py", line 24, in <module>
print d0
NameError: name 'd0' is not defined
这意味着:新式类的实例变量可以通过特殊的a.__dict__
字段访问。可以在globals()
返回的字典中设置全局变量。将这些结合在一起,你就有了解决方案。
答案 1 :(得分:1)
您可以定义
d1 = a.b.c.d1
d2 = a.b.c.d2
但是
这样的作业d1 = 2
只会影响本地变量d1
,而不会影响a.b.c.d1
。
如果您希望分配影响a.b.c.d1
,请使用
c = a.b.c
c.d1 = 2
没有办法只使用像d1
这样的裸变量名称。