Python Language
Die spezielle Variable __name__
Suche…
Einführung
Die spezielle Variable __name__
wird verwendet, um zu prüfen, ob eine Datei als Modul importiert wurde oder nicht, und um eine Funktion, eine Klasse oder ein __name__
anhand ihres Attributs __name__
zu identifizieren.
Bemerkungen
Die Python-Sondervariable __name__
wird auf den Namen des __name__
Moduls gesetzt. Auf der obersten Ebene (z. B. im interaktiven Interpreter oder in der Hauptdatei) wird '__main__'
. Dies kann verwendet werden, um einen Anweisungsblock auszuführen, wenn ein Modul direkt ausgeführt und nicht importiert wird.
Das zugehörige spezielle Attribut obj.__name__
wird in Klassen, importierten Modulen und Funktionen (einschließlich Methoden) gefunden und gibt bei der Definition den Namen des Objekts an.
__name__ == '__main__'
Die spezielle Variable __name__
wird vom Benutzer nicht festgelegt. Es wird meistens verwendet, um zu prüfen, ob das Modul von alleine ausgeführt wird oder nicht, weil ein import
durchgeführt wurde. Um zu vermeiden, dass Ihr Modul beim Importieren bestimmte Teile des Codes if __name__ == '__main__'
, prüfen Sie, if __name__ == '__main__'
.
Lassen Sie module_1.py nur eine Zeile lang sein:
import module2.py
Und mal sehen was passiert, abhängig von module2.py
Situation 1
module2.py
print('hello')
Wenn Sie module1.py ausführen, wird hello
gedruckt
Wird module2.py ausgeführt, wird hello
gedruckt
Situation 2
module2.py
if __name__ == '__main__':
print('hello')
Wenn Sie module1.py ausführen, wird nichts gedruckt
Wird module2.py ausgeführt, wird hello
gedruckt
Funktionsklasse_oder_Modul .__ Name__
Das spezielle Attribut __name__
einer Funktion, Klasse oder eines Moduls ist eine Zeichenfolge, die ihren Namen enthält.
import os
class C:
pass
def f(x):
x += 2
return x
print(f)
# <function f at 0x029976B0>
print(f.__name__)
# f
print(C)
# <class '__main__.C'>
print(C.__name__)
# C
print(os)
# <module 'os' from '/spam/eggs/'>
print(os.__name__)
# os
Das __name__
Attribut ist jedoch nicht der Name der Variablen, die auf die Klasse, Methode oder Funktion verweist, sondern der Name, den sie bei der Definition erhalten hat.
def f():
pass
print(f.__name__)
# f - as expected
g = f
print(g.__name__)
# f - even though the variable is named g, the function is still named f
Dies kann unter anderem zum Debuggen verwendet werden:
def enter_exit_info(func):
def wrapper(*arg, **kw):
print '-- entering', func.__name__
res = func(*arg, **kw)
print '-- exiting', func.__name__
return res
return wrapper
@enter_exit_info
def f(x):
print 'In:', x
res = x + 2
print 'Out:', res
return res
a = f(2)
# Outputs:
# -- entering f
# In: 2
# Out: 4
# -- exiting f
Zur Protokollierung verwenden
Beim Konfigurieren der integrierten logging
wird häufig ein Protokollierer mit dem Namen __name__
des aktuellen Moduls erstellt:
logger = logging.getLogger(__name__)
Dies bedeutet, dass der vollständig qualifizierte Name des Moduls in den Protokollen angezeigt wird, sodass Sie leichter erkennen können, woher die Nachrichten stammen.