Angenommen, ich habe die folgende Klasse mit der Methode foo
:
Wenn ich jetzt foo()
aufruft, erwarte ich / möchte das ausgedruckt sehen
Aber ich bekomme
%Vor% Und wenn ich die Klassendefinition in ein Modul namens FooBar
setzen würde, würde ich
Aber wenn ich das tue
%Vor%Ich bekomme genau das was ich will was ist
%Vor% Kann jemand bitte erklären, warum __name__
auf das Modul und nicht auf den Methodennamen verweist?
Gibt es eine einfache Möglichkeit, den Methodennamen zu erhalten?
Vielen Dank
Namen beziehen sich immer auf lokale Variablen oder (wenn eine nicht existiert) auf globale Variablen. Es gibt einen globalen __name__, der den Namen des Moduls hat.
%Vor%Natürlich ist das überflüssig und fast völlig sinnlos. Geben Sie einfach den Methodennamen ein:
%Vor% __name__
bezieht sich auf das Modul, weil genau das ist, was es tun soll . Der einzige Weg, um zur laufenden Funktion zu kommen, wäre, den Stack zu untersuchen.
Die anderen Antworten erklären es ziemlich gut, also trage ich mit einem konkreteren Beispiel bei.
name.py
%Vor%Ausgabe
%Vor%name2.py
%Vor%Ausgabe
%Vor% Beachten Sie, wie sich __name__
auf die integrierte Eigenschaft des Moduls bezieht. Dies ist __main__
, wenn das Modul direkt ausgeführt wird, oder der Name des Moduls, wenn es importiert wird.
Sie sollten das if __name__=="__main__":
Snippet durchlaufen haben.
Sie finden die relevanten Dokumente hier , schauen Sie sie sich an. Viel Glück! :)
Tags und Links python methods introspection