2012-01-29 8 views
0

私はPythonには新しく、プログラミングには新しいです。メソッドでもmethod1の変数を使用するにはどうすればよいのですか?方法2の方法1のバリエリの使い方

class abc(self): 
     def method1 (self,v1): 
      v1 = a+b 
      return v1 # want to use this value in method 2 
     def method2(self) 
       v2 * v1 = v3 

おかげ

+1

'v2 * v1 = v3'は' SyntaxError'を発生させるはずです。また、 'method1'の' v1'引数も無視されます。 –

+0

注意してください。 – danihp

+0

プログラミングを学ぶために使用しているチュートリアルは何ですか? **あなたの使用しているチュートリアルの名前またはリンクを** **更新してください。 –

答えて

1

method2が、それは引数を待っている "知る" してみましょう。

def method2(self,v1): #note v1 was added here 
    v2 * v1 = v3 #what does that suppse to do? [look my "third note"] 

にも注意してください:あなたはまたv2
method2()に第三に合格する必要があります注:あなたは正確に何をしようとしていますv2 * v1 = v3?多分あなたはv3 = v1 * v2を意味しましたか?

1

self、つまりself.v1 = a+bv2 * self.v1 = v3を使用してv1をインスタンス変数にします。しかし、2番目のコマンドは次のようになります:v3 = v2 * self.v1v2にまだ問題がありません。

method1method2よりも前に呼び出さなければなりません。それ以外の場合は、self.v1はmethod2の処理中に定義されません。 amitのアプローチはよりクリーンです。

幸運をPythonで学ぶ。それは素晴らしい言語です。

+1

'self'のものは**クラス変数ではありません。これはインスタンス変数です。クラス変数はクラスオブジェクトに添付されているため、すべてのインスタンス間で共有されます(希少ですが便利です)。 – delnan

+0

もちろん、あなたは正しいです。 – clime

0

クラス全体で値を使用するには、その値をそのインスタンスの属性にバインドする必要があります。例えば

class Abc(object):  # put object here, not self 

    def method1(self): 
     self.v1 = 3 + 7 # now v1 is an attribute 

    def method2(self) 
     return 4 * self.v1 

a = Abc() 
a.method1() 
a.v1 # -> 10 
a.method2() # -> 40 

しかし、通常は、いくつかのメソッドの呼び出しの後に上昇した属性を持っているのは良い習慣ではありませんので、あなたはまた、v1のデフォルト値を提供する必要があります。 __init__に置く:

class Abc(object): 

    def __init__(self): 
     self.v1 = 0 

    def method1(self): 
     self.v1 = 3 + 7 

    def method2(self) 
     return 4 * self.v1 

a = Abc() 
a.v1 # -> 0 
a.method1() 
a.v1 # -> 10 
a.method2() # -> 40 
+0

self.v1を使用する場合(インスタンスmethosd1の属性にする)method3またはmethod4でも呼び出し内の任意の場所にアクセスself.v1 self.v1とv1の違い – Shazib

+0

@Shazib:はい、他の方法で使用することもできます。 'v1'は変数であり、スコープはメソッドの終わりに終了します。' self.v1'はメソッドの中で 'a.v1'を呼び出すようなもので、' a'( 'Abc'のインスタンス)の属性です。 [Attributes and Methods](http://www.cafepy.com/article/python_attributes_and_methods/contents.html)で詳細を知ることができます。 –

0

もう一つの方法は、グローバル変数を使用することです。

def a(): 
    global v 
    v = 10; 

def b(): 
    print v 

if __name__=='__main__': 
    a() 
    b() 
+0

ここでは使用しないでください。また、最初に 'v'を宣言しません。あなたが**必要な**のみ**を使用するグローバル。 –

関連する問題