Pythonの変数スコープをモジュール全域にする方法です。クラスの中から外の変数を参照できればself.で扱わずに済むのに…という処理を書きたいときがあります。
例えば、オブジェクトをクラスの中から参照したいときに効果的です。オブジェクトの変数をglobals()に入れれば、グローバルのスコープを実現できます。
変数をグローバル化する
オブジェクトに対する処理をクラス分けしていくときに、そのオブジェクトをクラス変数やインスタンス変数にしたくないときがあります。
クラスの中からでも参照できるようにするには、globals()関数で変数スコープを広げてしまうのが簡便な方法です。
例えば、ファイルオブジェクト(file)をグローバル変数にするにはglobals()['file'] = file
とします。
def main():
with open('example.txt', 'w') as file:
globals()['file'] = file
HeadWriter()()
class HeadWriter(object):
def __call__(self):
file.write('head')
オブジェクトを複数のクラスで扱う場合に効果的
変数にしたオブジェクトを、モジュール全域で扱うことができれば便利です。複数のクラスがある場合は、それぞれに受け渡す手間を無くせます。
オブジェクトのスコープをグローバルにすることで、コードの可読性が良くなる場合があります。