So cosa significa doppio underscore per gli attributi/metodi della classe Python, ma significa qualcosa per l'argomento del metodo?Double underscore per il metodo Python * argomento *
Sembra che non sia possibile passare l'argomento iniziando con il doppio trattino basso sui metodi. È confuso perché puoi farlo per le normali funzioni.
considerare questo script:
def egg(__a=None):
return __a
print "egg(1) =",
print egg(1)
print
class Spam(object):
def egg(self, __a=None):
return __a
print "Spam().egg(__a=1) =",
print Spam().egg(__a=1)
esecuzione di questo script rendimenti:
egg(1) = 1
Spam().egg(__a=1) =
Traceback (most recent call last):
File "/....py", line 15, in <module>
print Spam().egg(__a=1)
TypeError: egg() got an unexpected keyword argument '__a'
ho controllato questo con Python 2.7.2.
Alcuni altri esempi
funziona:
def egg(self, __a):
return __a
class Spam(object):
egg = egg
Spam().egg(__a=1)
Questo non significa:
class Spam(object):
def _egg(self, __a=None):
return __a
def egg(self, a):
return self._egg(__a=a)
Spam().egg(1)
Se accade "indipendentemente da dove si verificano", mi aspetto l'ultimo esempio (quello ho aggiunto) funziona. Suppongo di sapere perché non lo fa; dovrebbe essere in "namespace di classe" o qualcosa del genere (non so qual è la parola giusta per questo), giusto? – tkf
Anch'io me lo aspetto e sono abbastanza sorpreso. Immagino che sia un difetto nella documentazione o nell'implementazione. Sto modificando in questo momento per aggiungere le mie scoperte. – delnan
Sono d'accordo sul fatto che non è un parametro elegante, ma considera quando hai qualcosa come 'self .__ dict __. Update (kwds)' nella funzione ma vuoi controllare il comportamento della funzione. L'unico nome argomento valido che posso pensare per controllare il comportamento è che inizia con il doppio trattino basso. – tkf