158

現在のモジュールに変数を設定するために、最初のパラメーター " object"として関数に何を渡しますか?setattr(object, name, value)

例えば:

setattr(object, "SOME_CONSTANT", 42);

と同じ効果を与える:

SOME_CONSTANT = 42

これらの行を含むモジュール内(正しいobject)。

モジュールレベルで動的にいくつかの値を生成しますが、モジュールレベルで定義できないため__getattr__、これがフォールバックです。

4

4 に答える 4

260
import sys

thismodule = sys.modules[__name__]

setattr(thismodule, name, value)

または、使用せずにsetattr(これは質問の文字を壊しますが、同じ実用的な目的を満たします;-):

globals()[name] = value

:モジュールスコープでは、後者は次と同等です。

vars()[name] = value

これはもう少し簡潔ですが、関数内からは機能しません(vars()呼び出されたスコープの変数を提供します:グローバルスコープで呼び出されたときのモジュールの変数、そしてそれをR / Wで使用しても問題ありませんが、関数は関数で呼び出されたときに変数をR/Oとして扱う必要があります。Pythonのオンラインドキュメントは、この特定の違いについて少し混乱する可能性があります)。

于 2010-05-29T02:11:38.297 に答える
6

モジュール内からモジュール スコープの変数を設定する必要がある場合、何が問題なのglobalですか?

# my_module.py

def define_module_scoped_variables():
    global a, b, c
    a, b, c = 'a', ['b'], 3

したがって:

>>> import my_module
>>> my_module.define_module_scoped_variables()
>>> a
NameError: name 'a' is not defined
>>> my_module.a
'a'
>>> my_module.b
['b']
于 2010-05-29T03:11:29.717 に答える
-1
  1. あなたはしません。あなたはするだろうglobals()["SOME_CONSTANT"] = 42
  2. あなたはしません。動的に生成されたコンテンツをモジュール以外の場所に保存します。
于 2010-05-29T02:23:31.040 に答える