2017-03-02 9 views
1

クラスメソッド内の新しい変数を宣言し、この2つの例の間に差がある場合、私は疑問に思って:私がしなければ基本的に私はPythonでクラスとメソッドの変数について読ん

class Example(object): 
    def __init__(self, nr1, nr2): 
     self.a = nr1 
     self.b = nr2 

    def Add(self): 
     c = self.a + self.b 
     return c 

class Example2(object): 
    def __init__(self, nr1, nr2): 
     self.a = nr1 
     self.b = nr2 

    def Add(self): 
     self.c = self.a + self.b 
     return self.c 

print Example(3,4).Add() 
print Example2(3,4).Add() 
は、だから私の質問はあり

7 
7 

私は同じ結果を得る

  1. self.c = self.a + self.bc = self.a + self.bの違いは何ですか?
  2. クラス内で宣言されたすべての新しい変数は、selfステートメントで宣言する必要がありますか?

ありがとうございました!

+4

'self.c'はオブジェクトに付けられた変数ですが、' c'は** local **変数です。 –

+0

@WillemVanOnsem:メソッド内に新しいクラスインスタンス変数を宣言できますか? – Litwos

+0

これらは**クラス変数ではありません**。これらは**オブジェクト変数**です。はい、オブジェクトは基本的に辞書であり、これらのアイテムをメソッドに追加/変更/削除することができます。 –

答えて

2

2つ目の例では、加算の結果をオブジェクト変数cに格納する点が異なります。最初の例では、cはメソッド内にあり、クラスが定義されていないときにAddメソッドが呼び出されたときにインスタンス化されるため、クラス変数にすることはできません。

メソッド内の変数は、それらを格納したい場合にのみselfで書き込む必要があります。ローカルの重要でない変数は、cの例のように、メソッドの中に書くことができます。

-1

1.-あなたはself.c他の方法で使用することができますcいいえ、はローカル変数です。

2.-はい、自己c

3.いいえ、現在の方法でのみ必要な場合は、ローカルを使用します。

4.-内__init__またはクラスの冒頭に、それは大丈夫です。

0
class Example(object): 
    def __init__(self, nr1, nr2): 
     self.a = nr1 
     self.b = nr2 

    def Add(self): 
     c = self.a + self.b 
     return c 

インスタンスx = Example()を作成するとします。

x.cを使用してcにアクセスしようとするとします。次のエラーが発生する

AttributeError: 'Example'オブジェクトには属性 'c'がありません。

+0

あなたの言うことは正しいですが、あなたは本当にそれがエラーを出すのか、なぜこれが彼の質問に答えるのかを説明していません。この回答を改善するには、あなたの答えの背後にある理由と論理をOPに説明してください。彼らは何も知らないと仮定しなければならないので、あなたは非常に単純なレベルからそれを説明しています。 –

関連する問題