アプリ版:「スタンプのみでお礼する」機能のリリースについて

class SimpleData:

a = 0
b = 5

def set(self, a, b):
self.a = a
self.b = b

def sum(self):
return self.a + self.b


data3 = SimpleData()

data1 = SimpleData()

data1.set(8, 2)
print(data1.sum())
print(data3.sum())

とすると 答えが
10
5
と出るんですが、どうして(なにをもって振り分けて)

a = 0
b = 5

a = 8
b = 2

の場合を振り分けて合計するのかわからない。
お教えください。

A 回答 (2件)

class SimpleData:で定義された


a = 0
b = 5
はクラス変数といいますが、
def set(self, a, b):
self.a = a
self.b = b
のself.a、self.bはインスタンス変数といって、クラス変数a,bとは別物です。

def sum(self):
return self.a + self.b
で、self.a + self.bは
インスタンス変数があれば、インスタンス変数a,bを参照します。
無ければ、クラス変数a,bを参照します。
data1は、data1.set(8, 2)によりインスタンス変数が生成されているので、
8と2を参照し、結果として10になります。
data3はインスタンス変数が生成されていないので、クラス変数を参照し、
結果として5になります。

個人的には、クラス変数とインスタンス変数は同じ名前を使用しないほうが
無難かと思います。
    • good
    • 0

振り分け?


別に振り分けてないでしょ。

作成したdata1とdata3は「別物」です。
data1のインスタンス変数を変更してもdata3は「影響を受けない」。
それだけです。

言い換えると「同じ枠組みを使ってもインスタンスを生成した時点で別物」にするためにオブジェクト指向、と言う考え方が出てきてます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!