Come fa il runtime Python a sapere a quale oggetto è associato un metodo?

2

Quando definiamo i metodi in una classe, abbiamo un argomento per l'oggetto su cui viene invocato il metodo i.e self .

Dire che ho una classe Foo.

class Foo:
   def m(self):
      pass

ora quando abbiamo un oggetto di Foo, dillo a foo.

e facciamo qualcosa di simile,

foo_m = foo.m

e poi prova a chiamare foo_m con gli stessi parametri che avrebbero fatto con foo.m. Funziona.

Quindi, come fa foo_m a sapere quale dovrebbe essere il valore dell'argomento self quando non viene chiamato in foo.m() fashion?

sulla stampa di foo.m, REPL mostra che è un metodo associato a quell'oggetto particolare.

È un altro oggetto funzione che tiene traccia dell'argomento auto e del metodo da chiamare?

    
posta Amogh Talpallikar 28.10.2015 - 07:00
fonte

1 risposta

1

Un metodo associato è solo un oggetto Python che memorizza self in uno dei suoi slot. Dai un'occhiata a methodobject.c per l'implementazione C. In Python lo slot è accessibile tramite l'attributo __self__ :

>>> a = [1, 2, 3].append
>>> a
<built-in method append of list object at 0x103b39588>
>>> a.__self__
[1, 2, 3]
    
risposta data 01.11.2015 - 15:16
fonte

Leggi altre domande sui tag