2017-08-19 49 views
0

我需要實例化一個快譯通的一些關鍵作爲一個獨立的全局變量。全局變量的字符串?

(之前你反對讓我提到這純粹是出於測試目的,我知道它污染了全球範圍內,它不打算作爲編程技術。)

確定。現在,這一點。如果我使用如下所示的簡單功能,它就可以工作。

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

items_as_vars(OBJ,[ '圓', '正方形'])

打印圓

但我移動此成爲類方法在一個單獨的文件中的時刻它停止工作,即

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,[ '圈子', '方'])

打印圈

NameError: name 'circle' is not defined 

任何想法,爲什麼?通過「停止工作」,我的意思是全局變量不再被實例化。


更多信息:它似乎工作時,類是在同一個文件,但不是當導入類時!


修改爲靜態方法,它是一樣的行爲。

+0

停止工作?怎麼樣?請[mcve]。這兩個是相同的。 –

+1

工作正常,我......你會需要提供一個更完整的例子。 –

回答

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' 
+0

解決,謝謝 – user1019129