2015-11-18 5 views

Antwort

16

Jede gebundene Methode hat das __self__ Attribut, das die auf die

Beispiel ist dieses Verfahren gebunden ist, oder None

(kopiert von here)

Mehr über gebundene Methoden (von Data Model):

Wenn Sie über eine Instanz auf eine Methode (eine in einem Klassennamensraum definierte Funktion) zugreifen, erhalten Sie ein spezielles Objekt: eine gebundene Methode (auch genannt Instanzmethode) -Objekt. ... Gebundene Methoden haben zwei spezielle Nur-Lese-Attribute: m.__self__ das Objekt, auf dem das Verfahren arbeitet ...

So f.__self__ werden Sie die Klasseninstanz erhalten:

print(f.__self__) # <__main__.Foo object at 0x7f766efeee48> 

Und type(f.__self__) oder f.__self__.__class__ werden Sie den Typ Objekt erhalten:

print(type(f.__self__)) # <class '__main__.Foo'> 

Sie nurverwenden würde, 210 für old-style classes.

+0

Nitpick: Der Typ der Instanz ist nicht unbedingt die Klasse, in der die Funktion definiert wurde; Nur weil die Methode an eine X-Instanz gebunden ist, heißt das nicht, dass die Funktion nicht in Klasse Y definiert werden könnte. Aber dieser Code wird sicherlich in 99,99% der realen Szenarien die korrekte Ausgabe liefern. Und es ist sowieso nicht klar, wie hoch die erwarteten Ergebnisse des OP in einem solchen Fall von 0,01% wären. –

Verwandte Themen