2016-07-01 8 views
0

私はPythonで新しく、知りたいと思います:別のクラスで1つの変数を使用することは可能ですか?例えばPythonは別のクラスで変数を使用します

class Hello: 

    def function_a(self): 
     x = 1 


class World: 

    def function_b(self): 
     print(x) 


a = Hello() 
b = World() 
a.function_a() 
b.function_b() 

どのように私はクラス間の "X" を共有することができますか?

+1

両方のメソッドに 'global x'を追加します。 :-( – melpomene

答えて

1

あなたは、変数を渡したくない場合は、あなたがそれglobal行う必要があります。

class Hello: 
    def function_a(self): 
     global x 
     x = 1 


class World: 
    def function_b(self): 
     global x 
     print(x) 


a = Hello() 
b = World() 

>>> x = 20 
>>> b.function_b() 
20 
>>> a.function_a() 
>>> b.function_b() 
1 
>>> 
3

それを行うことができないこと、であるとして。単純なオプションは、それを使用する各関数の先頭にglobal x行を追加してxをグローバルにすることです。

ベストプラクティスは、グローバルを回避し、共有変数を保持するオブジェクトを周りに渡すために、次のようになります。その方法で

class Hello: 

    def function_a(self): 
     # Stores the x variable in the current instance of Hello 
     self.x = 1 


class World: 

    def function_b(self, a): 
     print(a.x) 


a = Hello() 
b = World() 
a.function_a() 
b.function_b(a) 
1

ありません。 Pythonは、現代の言語のように、スコープを持っています。あなたはグローバルを使うことができますが、ほとんど常に悪い習慣であるので、それを習得しないでください。

これは私がやる方法です。

class Hello: 
    def __init__(self, shared): 
     self.shared = shared 

    def function_a(self): 
     self.shared['x'] = 1 

class World: 
    def __init__(self, shared): 
     self.shared = shared 

    def function_b(self): 
     print(self.shared['x']) 

shared = {} 
a = Hello(shared) 
b = World(shared) 
a.function_a() 
b.function_b() 
関連する問題