
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
の場合を振り分けて合計するのかわからない。
お教えください。
No.1ベストアンサー
- 回答日時:
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になります。
個人的には、クラス変数とインスタンス変数は同じ名前を使用しないほうが
無難かと思います。
No.2
- 回答日時:
振り分け?
別に振り分けてないでしょ。
作成したdata1とdata3は「別物」です。
data1のインスタンス変数を変更してもdata3は「影響を受けない」。
それだけです。
言い換えると「同じ枠組みを使ってもインスタンスを生成した時点で別物」にするためにオブジェクト指向、と言う考え方が出てきてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ruby OpenURI::Meta
-
Ruby require ライブラリー
-
Accessで文字列のバイト数読み込み
-
【メモリ不足で落ちる(python)】
-
1、Rstudioで回帰直線を求める...
-
VBScriptでExcel(2019)上のデー...
-
クリスタルレポートで困ってい...
-
パイソンプログラム
-
7セグメント LED ディスプレイ ...
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス名やモジュール名の競合...
-
HSTLやSSTL等のI/Oピン
-
What class are you in? には何...
-
変数の隠蔽とは?
-
pythonのerrorコード
-
c#のマクロ定義について
-
2つのクラスがお互いのポイン...
-
templateクラス中のtypedef enu...
-
動的配列の構造体の受け渡しに...
-
ruby on railsのmigrateでカラ...
-
原因のat?
-
テンプレートの特殊化でコンパ...
-
【delphi】クラスの継承、互換...
-
PythonのClassに関する質問です。
-
GPRSのclassについて
-
Rubyの正規表現を引数に
-
あってますか?
-
「arg」は何の略?
-
get() と find() の違いについて
-
エラー「メソッドまたはデータ...
おすすめ情報