2016-10-30 10 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

関数が実行されて返された後、そのローカル変数はそれ以上参照できません。関数のスコープ内で(ローカルに)バインドされており、その外部ではアクセスできません。

1つのオプションは、作成されたインスタンスを返し、それをグローバルスコープ内の名前にバインドすることです。名前にx外側を関数の戻り値をバインドする機能MyClassPrinterreturn xx = MyClassPrinter()割付:これは、2つの変更を必要とする別のオプションを使用して、グローバルスコープ内のオブジェクトをバインドすることです

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

ありがとう、それは働いたようです。私はそれを試みたはずです。 –

関連する問題