2012-08-01 28 views
5

Burada bir sorunum var. Diyelim ki 2 tane ana dersim var. İkisi de bir ana sınıftan miras kalıyorlar. Sonra her ikisi de bir çocuk sınıfına ait ebeveyn sınıflarıdır. Anne sınıfının "bir çocuğa sahip olmak" olduğumuzu anlayabilmem için bir yolu var mı? Hangi anne sınıfını anlayabilmek için çocuğa ihtiyacım yok, Baba'nın hangi ana dersin olduğunu anlamasını istiyorum.Python: "Eş" sınıfını mı buldunuz?

Bunun aptalca bir örnek olduğunu biliyorum, ancak başka bir yerde yapmam gerekenlerin basitleştirilmiş bir versiyonu.

class Master(object): 
    def __init__(self): 
     self.troll() 
     self.trell() 

class Mother1(Master): 
    def troll(self): 
     print 'troll1' 

class Mother2(Master): 
    def troll(self): 
     print 'troll2' 

class Father(Master): 
    def trell(self): 
     print 'trell' 
     print self.figure_out_spouse_class() 

class Child1(Mother1, Father): 
    pass 

class Child2(Mother2, Father): 
    pass 

c = Child1() #should print 'Mother1' 
c = Child2() #should print 'Mother2' 

~
~
~
~

+2

gibi alt nesne sınıfının bir şeyin __bases__ bakabilirsiniz. –

cevap

6

Sen __bases__ kullanabilirsiniz: daha varsa

def figure_out_spouse_class(self): 
    return [b.__name__ for b in self.__class__.__bases__ if b != Father] 

(Bu, tüm "eş" sınıfların isimlerini döneceğini bir).

+0

Bu iş mükemmel! Teşekkürler! –

+1

@ user1137940 - Bu çözüm sizin için işe yaradıysa (belirtmiş olduğunuz gibi), kabul etmelisiniz (yanındaki küçük onay işaretini tıklatın). Bu David'e küçük bir bonus şöhreti veriyor (ve siz de biraz olsun). Ayrıca, bu gönderiye giren diğer kullanıcıların, hangi yanıtın en iyi olduğunu hemen görmelerini sağlar. (B1'den +1) – mgilson

1

Sen bile Python bir eş anlamak için yeterince güçlü değildir

class Father(Master): 
    def trell(self): 
     print self.__class__.__bases__[0] 
     super(self.__class__, self).troll()