2016-05-30 5 views
0

私はPythonモジュールを書いており、モジュール内に新しい変数を定義する関数があります。私はファイルをインポートしているファイルでアクセスできる変数を設定したい。それが混乱している場合は、ここに私のコードは次のとおりです。モジュール内のグローバル変数を編集するには?

# main.py 

import other_module 

other_module.set_variable("var1") 

print(other_module.var1) # This is not a NameError 

print(var1) # NameError 

私は少し別の何か行う場合は、:

# main.py 

from other_module import * 

set_variable("var1") 

print(var1) # NameError 

print(other_module.var1) # NameError 

そしてother_module.py

#  other_module.py 

def set_variable(name): 
    exec(""" 
global %s 
%s = 5 
     """ % (name, name)) 

を私はを制御することはできませんmain.py。それが消費者のコードです。 main.pyのグローバルにアクセスして変更できるようにしたい。私はこれがうまくいきます:

# main.py 

from other_module import * 

set_variable("var") 

print(var) # This should print 5 
+0

この質問はhttp://stackoverflow.com/questions/37534046 –

+0

なぜあなたは幹部を使用しているだけではなく、 'グローバル()'と非常によく似ているのですか? – BrenBarn

+0

@BrenBarnどのように 'globals()'を使うのですか? 'globals()。append'? – NoOneIsHere

答えて

1

あなたは何をしているのですか? クラスは、グローバル名前空間よりも安全に使用できます。クラスを試してみましょうか?

これは動作します:

# other.py 
class Other(object): 

    @classmethod 
    def set_variable(cls, name): 
     exec('Other.%s = 5' % name) 

# main.py 
from other import Other 

Other.set_variable('x') 
print Other.x 

# output 
% ./main.py 
5 
+0

気にしないでください、これは機能します!私はこれを受け入れるつもりです。 – NoOneIsHere

関連する問題