サンプルコード
Python
1class Worker: 2 def work(self): 3 obj_a = A() 4 obj_b = B() 5 6 7class A: 8 def __init__(self): 9 self.value = 0 10 11 12class B: 13 def change_value(self): 14 pass 15 16 17if __name__ == '__main__': 18 w = Worker() 19 w.work()
質問
上記のコードを例に質問します。
BクラスでAクラスのインスタンス変数を変更または取得したい場合に
以下コードのどちらのパターンが良い書き方なのでしょうか。
あるいは開発現場ではどちらのパターンが多く使われているのでしょうか。
個人的には汎用性が効く点とコードを長々と書かなくていい点で
パターン2がいいと感じています。
パターン1
Python
1class Worker: 2 def work(self): 3 self.obj_a = A() 4 self.obj_b = B(self.obj_a) 5 6 7class A: 8 def __init__(self): 9 self.value = 0 10 11 12class B: 13 def __init__(self, obj_a): 14 self.obj_a = obj_a 15 16 def change_value(self): 17 self.obj_a.value = 10 18 19 20if __name__ == '__main__': 21 w = Worker() 22 w.work()
パターン2
Python
1class A: 2 3 #クラス変数 4 instance = None 5 6 def __init__(self): 7 self.value = 0 8 A.instance = self 9 10 @staticmethod 11 def get_instance(): 12 return A.instance 13 14class B: 15 def __init__(self): 16 pass 17 18 def change_value(self): 19 obj_a = A.get_instance() 20 obj_a.value = 10 21 22 23if __name__ == '__main__': 24 w = Worker() 25 w.work()
補足情報(FW/ツールのバージョンなど)
Python 3.10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/21 11:01