2016-03-26 11 views
0

私が持っているメインクラスとして:パイソン - 同じ名前を持つ複数の継承

class OptionsMenu(object): 

    def __init__(self, name): 
     try: 
      self.menu = getattr(self, name)() 
     except: 
      self.menu = None 

    @staticmethod 
    def cap(): 
     return ['a', 'b'] 

として子クラスのオーバーライドがあります:最初のクラスは、デフォルトのテンプレートのメニューオプションを提供します

class OptionsMenu(OptionsMenu): 
    @staticmethod 
    def cap(): 
     return ['a', 'b', 'c'] 

を、しばらく次に、他のテンプレートを示します。

子クラスから派生した別のクラスOptionsMenuを取得し、そのリスト(['a', 'b', 'c'])を取得してそれを変更します。

これはPythonで実現可能ですか?はいの場合は、どうすればいいですか?

何か助けてくれてありがとう!

class OptionsMenu: 
    @staticmethod 
    def cap(): 
     return ['a', 'b', 'c'] 


class OptionsMenu(OptionsMenu): 
    @staticmethod 
    def cap(): 
     lst = super(OptionsMenu, OptionsMenu).cap() # ['a', 'b', 'c'] 
     lst.append('d') 
     return lst 

print(OptionsMenu.cap()) # ['a', 'b', 'c', 'd'] 

しかし、異なるクラスに同じクラス名を与えることを指摘したようは非常に悪い考えです:

+2

なぜ同じ名前を使用しますか? – ComputerFellow

+2

2つの 'OptionsMenu'が別個のモジュールにある可能性はありますが、それはなぜですか? –

+1

なぜ、なぜですか? –

答えて

0

何も親の静的関数の結果を得ることからあなたを停止しません!将来、多くの問題につながるでしょう。

なぜ異なるクラスに同じ名前が必要なのか考えてみてください。 名前が違うはずですか?

class OptionsMenu 

class SpecialOptionsMenu(OptionsMenu) 

それともOptionsMenuのうち、異なる機能を作る、とすぐcap()は静的メソッドであるようなものであってもよいですか?

def cap1(): return ['a', 'b', 'c'] 

def cap2(): return cap1() + ['d'] 
関連する問題