In Python, il nome self
è non speciale. È solo una convenzione per il nome del parametro, motivo per cui esiste un parametro self
in __init__
. (In realtà, __init__
non è molto speciale sia, e in particolare lo fa non in realtà creare l'oggetto ... che è una storia più lunga)
C("abc").process()
crea un'istanza C
, guarda in alto il metodo process
nella classe C
, e chiama questo metodo con l'istanza C
come primo parametro. Quindi finirà nel parametro self
se lo hai fornito.
Anche se si dispone di tale parametro, tuttavia, non è possibile scrivere qualcosa come def process(self, formatting = self.formatting)
, perché self
non è ancora in ambito nel punto in cui si imposta il valore predefinito. In Python, il valore predefinito per un parametro viene calcolato quando la funzione viene compilata e "bloccata" nella funzione. (Questo è lo stesso motivo per cui, se si utilizza un valore predefinito come []
, tale elenco si ricorderà le modifiche tra le chiamate alla funzione.)
Come potrei fare questo lavoro?
Il modo tradizionale è quello di utilizzare None
come impostazione predefinita e verificare tale valore e sostituirlo all'interno della funzione.Potresti scoprire che è un po 'più sicuro creare un valore speciale per lo scopo (è sufficiente un'istanza object
, purché la nascondi in modo che il codice chiamante non utilizzi la stessa istanza) anziché None
. In entrambi i casi, è necessario verificare questo valore con is
, non ==
.
fonte
2011-11-15 05:45:48
non utilizzare il formato come nome della variabile, in quanto è funzione built-in in python. – Yajushi
Modifica dell'errore di 'self' in' metodo di processo' –