Je viens juste de commencer à apprendre le python et je suis sûr que c’est une question stupide, mais j’essaie quelque chose comme ceci:
def setavalue(self):
self.myname = "harry"
def printaname():
print "Name", self.myname
def main():
printname()
if __== "__main__":
main()
L'erreur que je reçois est la suivante:
NameError: global name 'self' is not defined
J'ai vu cette façon d'utiliser l'auto-déclaration pour référencer les variables de différentes méthodes dans un code que j'ai lu et qui fonctionne très bien.
Merci pour l'aide
self
est l'auto-référence dans une classe. Votre code n'est pas dans une classe, vous n'avez que des fonctions définies. Vous devez envelopper vos méthodes dans une classe, comme ci-dessous. Pour utiliser la méthode main()
, vous devez d'abord instancier un objet de votre classe et appeler la fonction sur l'objet.
De plus, votre fonction setavalue
devrait être dans __init___
, la méthode appelée lors de l'instanciation d'un objet. La prochaine étape que vous devriez probablement examiner consiste à fournir le nom en tant qu'argument à init, afin que vous puissiez créer des objets de nom arbitraire de la classe Name
;)
class Name:
def __init__(self):
self.myname = "harry"
def printaname(self):
print "Name", self.myname
def main(self):
self.printaname()
if __== "__main__":
objName = Name()
objName.main()
Consultez le chapitre Classes du tutoriel Python an at Plongez dans Python pour plus de références.
En Python, self
est le nom conventionnel donné au premier argument des méthodes d'instance de classes, qui est toujours l'instance sur laquelle la méthode a été appelée:
class A(object):
def f(self):
print self
a = A()
a.f()
Vous donnera quelque chose comme
<__main__.A object at 0x02A9ACF0>
Cela devrait être quelque chose comme:
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()
Si vous venez d'un langage tel que Java, vous pouvez peut-être faire une sorte d'association entre self
et this
. self
sera la référence à l'objet qui a appelé cette méthode, mais vous devez d'abord déclarer une classe. Essayer:
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 __== "__main__":
main()
Vous pouvez essayer quelques tutoriels de base sur Python comme ici: Guide Python
Le nom self
est utilisé comme référence d'instance dans les instances de classe. Il n'est utilisé que dans les définitions de méthodes de classe. Ne l'utilisez pas dans les fonctions.
Vous ne pouvez pas non plus faire référence à des variables locales d'autres fonctions ou méthodes. Vous pouvez uniquement référencer des attributs d'instance ou de classe en l'utilisant.