ご質問は、Sample
クラスのインスタンスをsample1
、sample2
とそれぞれ別に生成しているのに、なぜc_list
にデータが集まるのか、との疑問から来ているものとしての回答です。答えとしては「c_lsit
がクラス変数として宣言されている」からです。この場合、Sample
クラスのインスタンスを何個作成しようとも、全て、クラス共通の変数であるc_clist
に作用します。
8.7. クラス定義 - python3.6
プログラマのための注釈: クラス定義内で定義された変数はクラス属性であり、全てのインスタンス間で共有されます。インスタンス属性は、メソッドの中で self.name = value とすることで設定できます。
クラス変数とインスタンス変数を別に宣言して動かしてみるサンプルです。実行結果に注意してみてください。
Python3
1# coding: utf-8
2class Sample:
3
4 # クラス変数
5 c_list = []
6
7 def __init__(self):
8 # インスタンス変数
9 self.c_list2 = []
10
11 def add_c_list(self,data):
12 self.c_list.append(data)
13 self.c_list2.append(data)
14
15
16print("\n出力結果:", end=" ")
17sample1 = Sample()
18sample1.add_c_list("データ1")
19
20sample2 = Sample()
21sample2.add_c_list("データ2")
22
23for item_data in sample1.c_list:
24 print(item_data, end=" ")
25
26print("\n出力結果2:", end=" ")
27for item_data in sample1.c_list2:
28 print(item_data, end=" ")
実行結果
sh
1$ python3 t1.py
2
3出力結果: データ1 データ2
4出力結果2: データ1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。