2015-11-18 8 views

risposta

16

Ogni metodo associato ha l'attributo __self__ che è l'istanza

a cui questo metodo è vincolata, o None

(copiato da here)

Ulteriori su metodi vincolati (da Data Model):

Se si accede a un metodo (una funzione definita nello spazio dei nomi di una classe) attraverso un'istanza, si ottiene un oggetto speciale: un metodo associato (anche denominato metodo di istanza). ... metodi Bound hanno due speciali attributi di sola lettura: m.__self__ è l'oggetto su cui il metodo opera ...

Così f.__self__ ti porterà l'istanza della classe:

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

E type(f.__self__) o f.__self__.__class__ ti porterà l'oggetto tipo:

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

devi usare solo __class__ per old-style classes.

+0

Nitpick: il tipo di istanza non è necessariamente la classe in cui è stata definita la funzione; solo perché il metodo è associato a un'istanza X, non significa che la funzione non possa essere definita nella classe Y. Ma detto questo, questo codice produrrà sicuramente l'output corretto nel 99,99% degli scenari del mondo reale. E comunque non è chiaro quale sia l'uscita prevista dell'OP in un caso dello 0,01%. –

Problemi correlati