2017-01-27 9 views
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つの質問をして、シングルトンについての議論を始めたいとは思わなかった。

+0

実際の要件がなければ、コメントするのは難しいです。懸念とSRPの分離は、あなたのクラスが複数の方法を持つことができないことを意味しません。あなたの "解決策"では、Bazには依然としてオリジナルと同じ問題があります。 Model-View-Controllerが問題の原因になると考えているかもしれません。データ(モデル)と操作/操作(コントローラ)を行うその他のクラスを管理するクラスを1つ用意します。必要に応じて、上にクラスを投げて結果を表示することができます(View)。 – RobertB

答えて

関連する問題