2016-03-26 21 views
0

Ich habe Hauptklasse:Python - Mehrfachvererbung mit demselben Namen

class OptionsMenu(object): 

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

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

und eine Überschreibung Kind Klasse hat wie:

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

Die erste Klasse, um die Menüoptionen für die Standardvorlage gibt, während Als nächstes gibt es eine andere Vorlage.

Ich möchte eine andere Klasse OptionsMenu von Kindklasse abgeleitet, und erhalten Sie die Liste (['a', 'b', 'c']) und nehmen Sie Änderungen an.

Ist das in Python erreichbar? Wenn ja, wie kann ich das erreichen?

Vielen Dank für jede Hilfe!

+2

Warum möchten Sie den gleichen Namen haben? – ComputerFellow

+2

Es ist möglich, wenn die zwei 'OptionsMenu' in verschiedenen Modulen sind, aber ... warum das? –

+1

Warum, nur warum ?? –

Antwort

0

Nichts hält von Ihnen aufgrund der Eltern statischer Funktion bekommen:

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'] 

Aber wie bereits erwähnte gleiche Klassennamen geben für verschiedene Klassen ist sehr schlechte Idee! Das wird in Zukunft zu vielen Problemen führen.

Versuchen Sie zu denken, warum Sie die gleichen Namen für verschiedene Klassen möchten. Könnten sie unterschiedliche Namen haben?

class OptionsMenu 

class SpecialOptionsMenu(OptionsMenu) 

Oder kann so schnell sein wie cap() statische Methode ist, machen verschiedene Funktionen aus OptionsMenu?

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

def cap2(): return cap1() + ['d'] 
Verwandte Themen