字符串到全局变量?

时间:2017-08-19 21:14:29

标签: python string global-variables instantiation

我需要将Dict的一些键实例化为独立的全局变量。

(在您反对之前,请允许我提及这纯粹是出于测试目的而且我知道它会污染全局范围。它不是用作编程技术。)

行。现在已经开始了。如果我使用类似下面的简单函数,它就可以工作。

def items_as_vars(obj, lst) :
    for i in lst :
        globals()[i] = obj.g(i)
        print i, obj.g(i)
  

items_as_vars(obj,['circle','square'])

     

打印圈

但是当我把它变成一个单独的文件中的类方法时它停止工作,即

class blah:
    @staticmethod
    def items_as_vars(obj, lst) :
       for i in lst :
            globals()[i] = obj.g(i)
            print i, obj.g(i)
  

blah.items_as_vars(obj,['circle','square'])

     

打印圈

NameError: name 'circle' is not defined

任何想法为什么? 通过“停止工作”,我的意思是全局变量不再被实例化。

更多信息:当类在同一个文件中时似乎有效,但在导入类时则不行!

修改为静态方法,它是相同的行为。

1 个答案:

答案 0 :(得分:1)

您需要使用__builtin__来创建跨模块变量。像这样:

class SomeClass(object):
    def g(self, x):
        return x
    def items_as_vars(self, lst) :
        for i in lst :
            import __builtin__
            setattr(__builtin__, str(i), self.g(i))
            print i, self.g(i)

In [9]: import test

In [10]: test.SomeClass().items_as_vars(['x', 'yz'])
x x
yz yz

In [11]: yz
Out[11]: 'yz'