我有一个变量层次结构,比如
a.b.c.d1
a.b.c.d2
a.b.c.d3
a.b.c.d4
现在我想让它们全部进入本地命名空间:
d1=2
d2=3
...
我怎样才能做到这一点?
我有一个变量层次结构,比如
a.b.c.d1
a.b.c.d2
a.b.c.d3
a.b.c.d4
现在我想让它们全部进入本地命名空间:
d1=2
d2=3
...
我怎样才能做到这一点?
实际上,您可以在 Python 中以类似 dict 的方式访问对象的所有字段,只要它是新样式的类,即该类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()
。把这些放在一起,你就有了解决方案。
你可以定义
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
.