¿Qué significa el error de Python “nombre ‘self’ no está definido”?

No puedo entender qué está mal con este fragmento muy simple :

class A(object): def printme(self): print "A" self.printme() a = A() 

Seguimiento (última llamada más reciente): archivo “prog.py”, línea 1, en clase A (objeto): archivo “prog.py”, línea 5, en A self.printme () NameError: nombre “self” no es definido

Lo siguiente debería explicar el problema. Tal vez quieras probar esto?

 class A(object): def printme(self): print "A" a = A() a.printme() 

El nombre self solo se define dentro de los métodos que declaran explícitamente un parámetro llamado self . No se define en el ámbito de la clase.

El scope de la clase se ejecuta solo una vez, en el momento de la definición de la clase. “Llamar” a la clase con A() llama a su constructor __init__() lugar. Así que tal vez realmente quieres esto:

 class A(object): def __init__(self): self.printme() def printme(self): print "A" a = A() 

Si tiene la intención de que la función se ejecute cada vez que se crea una instancia de la clase, intente esto:

 class A(object): def __init__(self): self.printme() def printme(self): print "A" a = A() 

Es exactamente lo que dice: self no se define cuando se llama self.printme() . self no está definido mágicamente para ti en Python; solo funciona dentro de un método que tiene un argumento llamado self . Si ayuda, intente reemplazar la palabra self con otra cosa, digamos foo , en todo su progtwig (porque realmente no hay nada especial en self como identificador).

Si desea imprimir algo al instanciar el uso del objeto:

 class A(object): def __init__(self): self.printme() def printme(self): print "A" a = A()