2013-11-15 4 views
6

Вот мой example.py файл:NameError: глобальное имя 'myExample2' не определен # модули

from myimport import * 
def main(): 
    myimport2 = myimport(10) 
    myimport2.myExample() 

if __name__ == "__main__": 
    main() 

А вот 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 

Когда я бегу example.py файл, я есть следующая ошибка:

NameError: global name 'myExample2' is not defined 

Как это исправить?

+2

вам нужно 'myExample2 (self, num)', а затем ссылаться на него как 'self.myExample2()' –

ответ

6

Вот простой код для вашего кода.

from myimport import myClass #import the class you needed 

def main(): 
    myClassInstance = myClass(10) #Create an instance of that class 
    myClassInstance.myExample() 

if __name__ == "__main__": 
    main() 

И 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 
7

Я вижу две ошибки в вас код:

  1. Вам нужно позвонить myExample2 в self.myExample2(...)
  2. Вам нужно добавить self при определении myExample2: def myExample2(self, num): ...
0

Вы должны создать экземпляр из класса myClass, а не экземпляр всего модуля (и я изменяю имена переменных менее ужасно):

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 __name__ == "__main__": 
    main() 
0

В то время как другие правильные ответы, мне интересно, если есть действительно необходимость в myExample2() быть методом. Вы могли бы, а также реализовать его автономно:

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) 

Или, если вы хотите сохранить пространство имен в чистоте, реализовать его как метод, но он не нуждается в self, как @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 
0

Во-первых, я согласен с ответом alKid. Это действительно больше комментарий к вопросу, чем ответ, но у меня нет репутации для комментариев.

Мой комментарий:

Глобальное имя, которое вызывает ошибка myImport не myExample2

Объяснение:

Сообщение полная ошибка генерируется мой Python 2.7:

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 

Я нашел этот вопрос, когда пытался отследить исправить «глобальное имя не определено» в моем собственном коде. Поскольку сообщение об ошибке в вопросе неверно, я оказался более смущенным. Когда я действительно запускал код и видел фактическую ошибку, все это имело смысл.

Надеюсь, это мешает любому, кто нашел эту тему, иметь ту же проблему, что и я.Если кто-то с большей репутацией, чем я хочу превратить это в комментарий или исправить вопрос, пожалуйста, не стесняйтесь.

+0

всем, кто наказывал меня за то, что я не ответил на вопрос, извиняюсь. ** TLDR: Образец кода в вопросе не вызывает ошибки. Вопрос невозможен! ** – Dennis

Смежные вопросы