Voici mon fichier example.py
:
from myimport import *
def main():
myimport2 = myimport(10)
myimport2.myExample()
if __== "__main__":
main()
Et voici le fichier myimport.py
:
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = myExample2(self.number) - self.number
print(result)
def myExample2(num):
return num*num
Lorsque j'exécute le fichier example.py
, le message d'erreur suivant s'affiche:
NameError: global name 'myExample2' is not defined
Comment puis-je résoudre ce problème?
Voici une solution simple à votre code.
from myimport import myClass #import the class you needed
def main():
myClassInstance = myClass(10) #Create an instance of that class
myClassInstance.myExample()
if __== "__main__":
main()
Et le myimport.py
:
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = self.myExample2(self.number) - self.number
print(result)
def myExample2(self, num): #the instance object is always needed
#as the first argument in a class method
return num*num
Je vois deux erreurs dans votre code:
myExample2
en tant que self.myExample2(...)
self
lors de la définition de myExample2: def myExample2(self, num): ...
Vous devez créer une instance de la classe myClass
, et non l'instance de l'ensemble du module (et j'édite les noms de variables pour qu'ils soient moins terribles):
from myimport import *
def main():
#myobj = myimport.myClass(10)
# the next string is similar to above, you can do both ways
myobj = myClass(10)
myobj.myExample()
if __== "__main__":
main()
Tout d'abord, je suis d'accord avec la réponse de alKid. C'est vraiment plus un commentaire sur la question qu'une réponse, mais je n'ai pas la réputation de commenter.
Mon commentaire:
Le nom global à l'origine de l'erreur est myImport
et non myExample2
Explication:
Le message d'erreur complet généré par mon Python 2.7 est:
Message File Name Line Position
Traceback
<module> C:\xxx\example.py 7
main C:\xxx\example.py 3
NameError: global name 'myimport' is not defined
J'ai trouvé cette question lorsque j'essayais de retrouver une obscure erreur "nom global non défini" dans mon propre code. Parce que le message d'erreur dans la question est incorrect, j'ai fini par être plus confus. Lorsque j'ai exécuté le code et constaté l'erreur réelle, tout était logique.
J'espère que cela empêchera quiconque de trouver ce fil d'avoir le même problème que moi. Si quelqu'un qui a plus de réputation que moi veut en faire un commentaire ou résoudre la question, n'hésitez pas.
Alors que les autres réponses sont correctes, je me demande s’il est vraiment nécessaire que myExample2()
soit une méthode. Vous pouvez aussi bien le mettre en œuvre de manière autonome:
def myExample2(num):
return num*num
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = myExample2(self.number) - self.number
print(result)
Ou, si vous voulez garder votre espace de noms propre, implémentez-le en tant que méthode, mais comme il n'a pas besoin de self
, en tant que @staticmethod
:
def myExample2(num):
return num*num
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = self.myExample2(self.number) - self.number
print(result)
@staticmethod
def myExample2(num):
return num*num