0
私は次のようになりますクラスを持っている:python 3:同じデータを操作する2つの異なるクラスを作成するにはどうすればよいですか?
# Class violates the Single Responsibility Principle
class Baz:
data = [42]
def do_foo_to_data(self):
# call a dozen functions that do complicated stuff to data
def do_bar_to_data(self):
# call other functions that do different stuff to data
私はそれがSRPを違反するため、二つの別々のクラスにそれを壊したいです。 do_foo_to_data()
によって呼び出される関数は、do_bar_to_data()
によって呼び出される関数とはまったく異なります。しかし、彼らは同じで動作する必要がありますdata
。
私はたくさんのソリューションを考え出しましたが、それらはすべて醜いです。これをきれいに、好ましくはPython 3で行う方法がありますか(2.7でもOKです)。
私の「ソリューション」の最高は以下の通りです:
# I find this hard to read and understand
class Baz:
data = [42]
def create_foo(self):
return Baz.Foo()
def create_bar(self):
return Baz.Bar()
class Foo:
def do_foo_to_data(self):
# call foo functions
class Bar:
def do_bar_to_data(self):
# call bar functions
注:それはdata
メンバーがクラスのメンバーであることを私に不可欠ではありません。 Baz
のインスタンスを1つだけ作成する予定です。 1つの投稿で2つの質問をして、シングルトンについての議論を始めたいとは思わなかった。
実際の要件がなければ、コメントするのは難しいです。懸念とSRPの分離は、あなたのクラスが複数の方法を持つことができないことを意味しません。あなたの "解決策"では、Bazには依然としてオリジナルと同じ問題があります。 Model-View-Controllerが問題の原因になると考えているかもしれません。データ(モデル)と操作/操作(コントローラ)を行うその他のクラスを管理するクラスを1つ用意します。必要に応じて、上にクラスを投げて結果を表示することができます(View)。 – RobertB