2017-11-03 21 views
0

私はPythonを使用して私のプロジェクト用のGUIを作成しています。これは私的なプロジェクトですが、良いコーディング方法を使用したいと思います。まず、私は私のGUIモジュールの簡易版をご紹介しましょう:インターフェイスを使用しているときに使用されていないパラメータ

# Just a box, can have borders or it can be filled 
class Box(object): 
    def __init__(self): 
     # Set initial state 

    def update(self, xy, press): 
     # I'm just a dummy box, I don't care about xy or press 
     pass 

    def draw(self): 
     # Draw 

# Like a box but with special functionality 
class Button(Box): 
    def __init__(self): 
     super(Button, self).__init__() 
     # Set initial state 

    def update(self, xy, press): 
     # Do something with xy and press 

# Like a box but with special functionality 
class Status(Box): 
    def __init__(self): 
     super(Status, self).__init__() 
     # Set initial state 

    def update(self, xy, press): 
     # Do something with xy, ignore press 

# A box which can hold boxes inside it to group them 
class Container(Box): 
    def __init__(self): 
     super(Container, self).__init__() 
     self.childs = deque() 

    def update(self, xy, press): 
     for c in self.childs: 
      c.update(xy, press) 

    # Container draws itself like a Box but also draws boxes inside it 
    def draw(self): 
     super(Container, self).draw() 
     for c in self.childs: 
       c.draw() 

すべてのGUIコンポーネントがコンテナです。 コンテナの update()は、最新の入力情報でコンポーネントの状態を更新するたびに呼び出されます。

私は1つのループでGUI全体を更新するインターフェイスを使用できるので、このソリューションが好きで、少しのコードを節約できます。私の問題は、これらの子どもの中には、インタフェースを使用して未使用のパラメータにつながる状態を更新するために、他の子より多くの情報を必要とすることです。

この場合、使用されていないパラメータを使用することは悪い習慣と考えられますか?インターフェイスを使用しないでください。

答えて

1

これを行う通常の方法は、協調継承と呼ばれ、スーパークラスとサブクラスの両方がお互いに近づき、必要のない情報が渡されることを期待する言葉です。このタイプの方法は次のように見える傾向:

つまり
def foo(self, specific, arguments, *args, **kwargs): 
    do_something_with(specific, arguments) 
    super(MyClass, self).foo(*args, **kwargs) 

、各より固有Containerはそれについて特別な何扱うが、すべてのContainer sのが一般的です(とがない場合、デフォルト機能があるかどう - なぜ継承を使用していますか?)、スーパークラスでのみ定義し、superを使用してサブクラスで継承します。

関連する問題