Sé lo que significa subrayar doble para los atributos/métodos de la clase Python, pero ¿significa algo para el argumento de método?Doble guión bajo para el método Python * argumento *
Parece que no se puede pasar el argumento comenzando con doble guion bajo a los métodos. Es confuso porque puede hacer eso para las funciones normales.
consideran este 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)
Al ejecutar este script de rendimientos:
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'
he comprobado esto con Python 2.7.2.
Algunos otros ejemplos
funciona esto:
def egg(self, __a):
return __a
class Spam(object):
egg = egg
Spam().egg(__a=1)
Esto no significa:
class Spam(object):
def _egg(self, __a=None):
return __a
def egg(self, a):
return self._egg(__a=a)
Spam().egg(1)
Si sucede "independientemente del lugar donde se producen", espero que el último ejemplo (la que he añadido) funciona. Supongo que sé por qué no lo hace; debería estar en "espacio de nombres de clase" o algo así (no sé cuál es la palabra correcta para eso), ¿verdad? – tkf
También lo esperaría, y estoy bastante sorprendido. Supongo que es un defecto en la documentación o la implementación. Estoy editando ahora mismo para agregar mis hallazgos. – delnan
Estoy de acuerdo en que no es un parámetro elegante, pero considere cuando tiene algo como 'self .__ dict __. Update (kwds)' en la función, pero quiere controlar el comportamiento de la función. El único nombre de argumento válido que puedo pensar para controlar el comportamiento es el que comienza con doble guion bajo. – tkf