Wie kann man mit einer Methode in Python auf einen Methodennamen verweisen?

8

Angenommen, ich habe die folgende Klasse mit der Methode foo :

definiert %Vor%

Wenn ich jetzt foo() aufruft, erwarte ich / möchte das ausgedruckt sehen

%Vor%

Aber ich bekomme

%Vor%

Und wenn ich die Klassendefinition in ein Modul namens FooBar setzen würde, würde ich

bekommen %Vor%

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

    
Philip Clarke 08.02.2010, 14:05
quelle

7 Antworten

11

Das macht, wonach Sie suchen:

%Vor%     
MattH 08.02.2010 14:20
quelle
4

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%     
Roger Pate 08.02.2010 14:14
quelle
3

__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.

    
Ants Aasma 08.02.2010 14:15
quelle
2

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! :)

    
Mizipzor 08.02.2010 14:23
quelle
1

Verwenden Sie Introspektion mit dem Modul inspect .

%Vor%     
sykora 08.02.2010 14:23
quelle
1

Sehen Sie sich das Modul inspect an.

Versuchen:

%Vor%

oder:

%Vor%     
Dave Webb 08.02.2010 14:26
quelle
-1

Das wird es tun:

(Sie müssen sich auf self.__class__._name__ beziehen.)

%Vor%     
0xfe 08.02.2010 14:16
quelle

Tags und Links