GlobVars
とMyModule
の2つのPythonモジュールを想定します。Pythonのモジュールと静的メソッド間のグローバル変数へのアクセス
モジュールGlobVars
は、他のモジュールにグローバル変数my_glob_var
を提供することを目的としています。
# cat GlobVars.py
class getGlobVars:
def __init__(self):
global my_glob_var
my_glob_var = 'World'
def go(self):
pass
モジュールMyModule
は2つの機能(_concat
とgetConcat
)、のいずれかでクラスを含む(すなわち、_concat
)は、前述のグローバル変数にアクセスしようとstaticmethodあります。関数getConcat
はstaticmethodにアクセスし、連結された文字列を返すことになっています。
# cat MyModule.py
import GlobVars as GV
class MyClass:
def __init__(self, var1):
self.var1 = var1
@staticmethod
def _concat(var2):
GV.getGlobVars().go()
return var2 + my_glob_var
def getConcat(self):
return MyClass._concat('Hello ')+self.var1
私は両方のモジュールをロードし、機能getConcat
を実行しようと
global
キーワードも
GlobVars
クラスを使用する必要はありません、あなたの特定のケースで
import MyModule
import GlobVars
print MyModule.MyClass('!').getConcat()
# NameError: global name 'my_glob_var' is not defined
1. Pythonのグローバルが「グローバルグローバル」ではありません、彼らはへの唯一のグローバルです定義されているモジュール2.グローバルを変更する場合は 'global'キーワードだけが必要です。キーワードなしでグローバルを読むことができます(とにかく変更可能なグローバルを使わないでください)。 3. Python 2を使用しているので、新しいスタイルのクラスを使うべきです:クラスを 'object'から継承させる、そうでなければ古い古いスタイルのクラスを取得します。 (Python 3は新しいスタイルしか持っていないので、 'object'から明示的に継承する必要はありませんが、Python 2にバックポートするのが簡単になるので、やってみるといいです。 –