驚いた点
以下のようなコードを想定します。
sample.py
class Sample:
sample_list = []
def __init__(self, args1):
self.name = args1
def add_args(self, args2):
self.sample_list.append(args2)
このコードを実行するとsample_listがクラス変数となるため、aとbの間でシェアされてしまいます。
>>> a = Sample('a')
>>> b = Sample('b')
>>> a.add_args('hoge')
>>> b.add_args('huga')
>>> a.sample_list
['hoge', 'huga']
このような動作が望ましい場合もあると思いますが、今回はインスタンス毎に独立した変数であってほしいため、以下のような方法でsample_listをインスタンス変数として宣言します。
解決方法
以下のようにインスタンス変数を用いてクラスを設計することで、この問題を防ぐことができます。
sample.py
class Sample:
def __init__(self, args1):
self.name = args1
self.sample_list = []
def add_args(self, args2):
self.sample_list.append(args2)
実行結果
>>> a = Sample('a')
>>> b = Sample('b')
>>> a.add_args('hoge')
>>> b.add_args('huga')
>>> a.sample_list
['hoge']
>>> b.sample_list
['huga']
参考
クラス ― Python3.8.5 ドキュメント
とても参考になるコメントありがとうございます!