2016-07-19 9 views
-4

私はかなりOOP言語の新しさと私は両方のメソッドを持つ2つのクラス間で変数を共有するシナリオがあります。クラス1では変数var1を持つ関数があります。私はその変数をクラス2で利用できるようにしたいと思いますが、func2しかし、これをどうやって行うのかはわかりません。クラスとメソッドの間で変数を共有

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(object): 

    def func2(self): 
    # how can i get var1 here ? 
+3

変数をメソッドに渡すか、クラスの1つが他のクラスから継承して変数を取得する必要がありますが、これはOOPを理解して抽象クラス自体と(この変数はメソッドのローカルスコープにのみ存在し、 '__init__'メソッドで定義されています)。また、グローバル変数、またはOneとTwoの両方が使用する第3クラスオブジェクトの一部にすることもできます。実際のデータ関係を理解し​​ていない、「One」と「Two」と言うのは難しいです。 – Dan

+2

ローカル変数ではなく、 'var1'をインスタンス変数にすることもできます(例:' self.var1 = 'foo'')。それから 'func2'は' One'のインスタンスへの参照を持っていればその値にアクセスすることができます。 – Blckknght

+0

「One」と「Two」(もしあれば)の関係が理解されるように、これを抽象的なものにすると、より良い答えが得られます(実際のものが機密であれば類似の関係を選択します)。 – Dan

答えて

0

クラスのいずれかが実際に別のクラスのサブクラスである場合、継承を使用できます。

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(One): 

    # func1 already exists here. 
    # So does var1 

あなたは、関数は、引数

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(object): 

    def func2(self, var): 
     # Use var 

それとも、グローバル変数を使用することができますが、私はあなたがちょうどOOPを入力している場合は、これを回避したいと考えを受け入れることができます。

注:大規模なプロジェクトやプログラムでグローバル変数を使用すると、実際に多くのエラーが発生する可能性があります。あなたは、別の方法に移行する経験があるまで使用することができます。しかし、結局OOPでそれらを使用しなくてはなりません。私はそれを練習目的のためだけに提案しました。それを覚えておいてください。

編集:あなたのケースでは、静的なクラス要素、たとえばを使用することができます。

class One(object): 
    var1 = "foonimo" 
    def func1(self): 
     #use var1 

class Two(object): 

    def func2(self, var): 
     # Use as One.var1 

これは動作するはずであり、グローバル変数よりも実行可能です。

+0

1. OPがメソッドをオーバーロードしたい場合、最初のものは無意味です。 2.「グローバル変数を使用できます」 - これは私が実際に投票しているものです。 –

+1

@EliKorvigo私は避けるようにアドバイスしましたが、それはオプションであることを否定することはできません。 – Rockybilly

+0

彼は初心者ですから、私はそのアドバイスにもっと重点を置いていたでしょう。 –

関連する問題