2016-03-26 23 views
0

Ben ana sınıfı olarak:Python - aynı ada sahip birden kalıtım

class OptionsMenu(object): 

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

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

ve bir çocuk sınıfı geçersiz kılma vardır: Birinci sınıf varsayılan şablonu için menü seçenekleri sunar

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

iken sonraki diğer şablon için verir.

Çocuk sınıfından türetilen başka bir sınıf OptionsMenu istiyorum ve listeyi alın (['a', 'b', 'c']) ve bunlarda değişiklikler yapın.

Bu python'da kullanılabilir mi? Eğer evet ise, bunu nasıl başarabilirim?

Yardımlarınız için çok teşekkürler!

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

Ama farklı sınıflar için aynı sınıf isim vermek belirtildiği gibi çok kötü bir fikir geçerli:

+2

Niçin aynı ada sahip olmak istersiniz? – ComputerFellow

+2

İki 'OptionsMenu' farklı modüllerdeyse mümkündür, ancak ... neden bu? –

+1

Neden, neden? –

cevap

0

Hiçbir şey ebeveynin statik fonksiyonun sonucu almak sizi durdurur! Gelecekte birçok soruna yol açacaktır.

Düşünmeye çalışın, neden farklı sınıflar için aynı isimleri istiyorsunuz? Farklı isimlere sahip olmalılar mı?

class OptionsMenu 

class SpecialOptionsMenu(OptionsMenu) 

Veya OptionsMenu dışında farklı işlevleri yapmak, en kısa sürede cap() statik yöntemdir olarak olabilir?

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

def cap2(): return cap1() + ['d'] 
İlgili konular