Por qué tal estructura
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
da un error NameError: name 'self' is not defined?
Los valores de argumento predeterminados se evalúan en la función define-time, pero selfes un argumento solo disponible en el momento de la llamada a la función. Por lo tanto, los argumentos en la lista de argumentos no pueden referirse entre sí.
Es un patrón común predeterminar un argumento Noney agregar una prueba para eso en el código:
def p(self, b=None):
if b is None:
b = self.a
print b
Para los casos en los que también desea tener la opción de establecer 'b' en Ninguno:
fuente
Si ha llegado aquí a través de google, asegúrese de verificar que se haya dado a sí mismo como el primer parámetro para una función de clase. Especialmente si intenta hacer referencia a valores para ese objeto dentro de la función.
> NameError: el nombre 'self' no está definido
fuente