2017-04-04 6 views
0

をインスタンス化:は、私は次のようないくつかのPythonコード持っているグローバルオブジェクト

ここ
def a(): 
    x.b() 

def c(): 
    x = create_x() 
    a() 

を、xはオブジェクトなので、c()に、私はxを作成し、機能a()を実行したいです。私はの引数として渡す必要はなく、xをグローバルにします。しかし、上記のコードを実行しようとすると、のxが何も参照していないと伝えられます。

だから、これに対する標準的な解決策は何ですか?

x = 0 

def a(): 
    global x 
    x.b() 

def c(): 
    global x 
    x = create_x() 
    a() 

しかし、実際にはオブジェクトであるのに対しxは、整数であることが示唆されているので、これは、少し奇妙に思える:ひとつのアイデアは、グローバルxを定義し、0に設定することです。 Cにおいて

++ Iは、通常、xへのポインタを作成0に設定し、新しいオブジェクトxによって作成されたメモリへのポインタを設定することによって、これを解決するだろう。しかし、Pythonの中で最善の解決策は何ですか?

+2

使用 'NONE'? – Pit

+1

最初に 'x'を設定しないでください...?それは 'c'を実行することによって作成されます。関数の外で宣言する必要はありません。 'global'はすでにそうしています。 – deceze

+0

役立つかどうかを確認する:http://stackoverflow.com/questions/16511321/python-global-object-variable – planet260

答えて

0

これは私のために働いた。関数内で変数をグローバル化すると、それが開始されます。

このコードの問題は、bをaの前に呼び出す必要があることです。

def a(): 
    print(x) 

def b(): 
    global x 
    x = 1 
    a() 

b() 
0

質問に答えるかどうかは知りませんが、あなただけc()関数内global xを呼び出す必要があるように見えます。

class XClass: 
    def b(self): 
     print 'hello world' 

def create_x(): 
    return XClass() 

def a(): 
    x.b() 

def c(): 
    global x 
    x = create_x() 
    a() 

c() # hello world 
a() # hello world 

あなたはcreate_x()メソッド内x変数を作成した場合多分それはあまり混乱:代わりに '0'の

class XClass: 
    def b(self): 
     print 'hello world' 

def create_x(): 
    global x 
    x = XClass() 

def a(): 
    x.b() 

def c(): 
    create_x() 
    a() 

c() # hello world 
a() # hello world 
x.b() # hello world 
関連する問題