現在のモジュールに変数を設定するために、最初のパラメーター「object
」として関数setattr(object, name, value)
に何を渡しますか?
例えば:
setattr(object, "SOME_CONSTANT", 42);
次と同じ効果が得られます。
SOME_CONSTANT = 42
これらの行を含むモジュール内(正しいobject
を使用)。
モジュールレベルで動的に複数の値を生成していますが、__getattr__
モジュールレベルでは、これが私のフォールバックです。
_import sys
thismodule = sys.modules[__name__]
setattr(thismodule, name, value)
_
または、setattr
を使用せずに(これは質問の文字を壊しますが、同じ実用的な目的を満たします;-):
_globals()[name] = value
_
注:モジュールスコープでは、後者は次と同等です:
_vars()[name] = value
_
これはもう少し簡潔ですが、関数内からは機能しません(vars()
は、呼び出されたスコープの変数を提供します。グローバルスコープで呼び出されたときにモジュールの変数を使用し、それを使用してもかまいませんR/W、ただし、関数で呼び出されたときの関数の変数は、R/Oとして処理する必要があります。Pythonオンラインドキュメントは、この特定の区別について少し混乱する可能性があります)。
モジュール内からモジュールスコープの変数を設定する必要がある場合、global
の何が問題になっていますか?
# my_module.py
def define_module_scoped_variables():
global a, b, c
a, b, c = 'a', ['b'], 3
副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example:
>>> import my_module
>>> my_module.define_module_scoped_variables()
>>> a
NameError: name 'a' is not defined
>>> my_module.a
'a'
>>> my_module.b
['b']