Python-Haken für die Modul-Initialisierung

Habe ich ein python - module_A tut sich etwas:

myvar = "Hello"

def message():
    print myvar

Aus einem anderen Modul möchte ich importieren die Funktion message:

from module_A import message

Aber das ist die Definition myvar, was ich nicht will (aus Gründen, die nicht wirklich relevant hier). Ich denke, was ich brauchen, ist eine Unterscheidung zwischen importieren, die Dinge aus einem Modul, und mit jede der importierten Symbole. Eigentlich will ich myvar initialisiert werden nur wenn ich message.

Ich da jede Art von python-Haken, die ich verwenden könnte, zu initialisieren Sachen an, wenn eine Funktion oder eine Klasse zugegriffen wird? Ich möchte etwas ähnliches wie die folgenden:

module_setup_done = False
def setup():
    global module_setup_done, myvar
    if not module_setup_done:
        myvar = "Hello"
        module_setup_done = True

def message():
    setup()
    print myvar

Aber, um die übersichtlichkeit zu bewahren, möchte ich diese automatisch angerufen werden, so etwas wie dieses:

def _init_module():
    global myvar
    myvar = "Hello"

def message():
    print myvar

Wo _init_module() würde nur aufgerufen werden einmal, und nur das erste mal, dass etwas in der Modul ist zugegriffen, nicht, wenn etwas importiert.

Gibt es Unterstützung für diese Art von Muster in python?

InformationsquelleAutor dangonfast | 2012-10-11
Schreibe einen Kommentar