2016-10-30 7 views
-3

Почему я не могу ссылаться на экземпляр/объект вне функции, в которую я его создал, и как я могу исправить это.Почему я не могу ссылаться на экземпляр/объект за пределами функции, которую я создал?

упрощенный код:

class MyClass: 

    def PrintThis(self): 
     print ("Hello World") 



def MyClassPrinter(): 
    x = MyClass() 

    x.PrintThis() #This Works 





MyClassPrinter() 

x.PrintThis() #This "is not defined" 

Это выходит как:

Hello World 
Traceback (most recent call last): 
    File "C:\User\Desktop\test.py", line 19, in <module> 
    x.PrintThis() #This "is not defined" 
NameError: name 'x' is not defined 

Я не могу удалить функцию или инициализировать его вне функции, потому что в исходном коде на самом деле делает что нибудь.

Прошу прощения, если это глупый вопрос или уже ответили где-то в другом месте.

+0

Замените 'MyClassPrinter()' на 'x = MyClassPrinter()' во внешней области, если вы хотите ссылаться на тот же экземпляр, который вы создали внутри 'def MyClassPrinter', вам нужно добавить' global x' в метод. – ZdaR

ответ

0

После того, как функция выполнена и возвращена, ее локальные переменные недоступны для ссылок. Они связаны в рамках функции (локально) и недоступны вне ее.

Один из вариантов возвращает созданный экземпляр и привязывает его к имени в глобальной области; это требует двух изменений: а return x в функции MyClassPrinter и x = MyClassPrinter() присваивания, чтобы связать возвращаемое значение функции с именем x снаружи:

def MyClassPrinter(): 
    x = MyClass() 
    x.PrintThis() #This Works 
    return x 

x = MyClassPrinter() 
x.PrintThis() 

Другим вариантом является, чтобы связать объект в глобальном масштабе, используя global заявление:

def MyClassPrinter(): 
    global x 
    x = MyClass() 
    x.PrintThis() #This Works 

global заботится, чтобы связать x к глобальной и не локальной области видимости, тем самым позволяя на нее ссылаться, когда вне функции.

+0

Спасибо, что, похоже, сработало. Я должен был пробовать это. –

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