2011-08-11 8 views
10

acaba de comenzar pitón aprender y estoy seguro de que es una pregunta estúpida, pero estoy tratando algo como esto:pitón nombre global 'yo' no está definido

def setavalue(self): 
     self.myname = "harry" 

    def printaname(): 
     print "Name", self.myname  

    def main(): 
     printname() 




    if __name__ == "__main__": 
     main() 

El error que estoy consiguiendo es:

NameError: global name 'self' is not defined 

Vi esta forma de utilizar la auto declaración para las variables de referencia de diferentes métodos en algunos códigos que leo que funciona bien.

Gracias por la ayuda

+0

Convertir sus funciones separadas dentro basado en clases. – Yajushi

Respuesta

23

self es la autorreferencia en una clase. Tu código no está en una clase, solo tienes funciones definidas. Tienes que ajustar tus métodos en una clase, como a continuación. Para usar el método main(), primero tiene que crear una instancia de un objeto de su clase y llamar a la función en el objeto.

Además, su función setavalue debe estar en __init___, el método llamado al crear instancias de un objeto. El siguiente paso probablemente debería mirar es suministrar el nombre como un argumento a init, por lo que puede crear objetos de forma arbitraria con nombre de la clase Name;)

class Name: 
    def __init__(self): 
     self.myname = "harry" 

    def printaname(self): 
     print "Name", self.myname  

    def main(self): 
     self.printaname() 

if __name__ == "__main__": 
    objName = Name() 
    objName.main() 

Tener un vistazo a la Classes chapter of the Python tutorial una en Dive into Python para más referencias .

2

En Python self es el nombre convencional dado al primer argumento de los métodos de instancia de clases, que siempre es el caso, el método fue llamado en:

class A(object): 
    def f(self): 
    print self 

a = A() 
a.f() 

le dará algo así como

<__main__.A object at 0x02A9ACF0> 
0

El nombre self se utiliza como referencia de instancia en instancias de clase. Solo se usa en las definiciones de métodos de clase. No lo use en funciones.

Tampoco puede hacer referencia a variables locales desde otras funciones o métodos. Solo puede hacer referencia a atributos de instancia o clase utilizándolo.

1

Si viene de un lenguaje como Java, tal vez pueda hacer algún tipo de asociación entre self y this. self será la referencia al objeto que llamó a ese método, pero primero debe declarar una clase. Proveedores:

class MyClass(object) 

    def __init__(self) 
     #equivalent of constructor, can do initialisation and stuff 


    def setavalue(self): 
     self.myname = "harry" 

    def printaname(self): 
     print "Name", self.myname  

def main(): 
    #Now since you have self as parameter you need to create an object and then call the method for that object. 
    my_obj = MyClass() 
    my_obj.setavalue() #now my_obj is passed automatically as the self parameter in your method declaration 
    my_obj.printname() 


if __name__ == "__main__": 
    main() 

Usted puede probar algunos de Python tutorial básico como aquí: Python guide

2

Debería ser algo como:

class Person: 
    def setavalue(self, name):   
     self.myname = name  
    def printaname(self):   
     print "Name", self.myname   

def main(): 
    p = Person() 
    p.setavalue("harry") 
    p.printaname() 
Cuestiones relacionadas