2

我有一个变量层次结构,比如

a.b.c.d1
a.b.c.d2
a.b.c.d3
a.b.c.d4

现在我想让它们全部进入本地命名空间:

d1=2
d2=3
...

我怎样才能做到这一点?

4

2 回答 2

2

实际上,您可以在 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()。把这些放在一起,你就有了解决方案。

于 2013-01-10T22:41:40.003 回答
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.

于 2013-01-10T21:35:56.433 回答