2012-08-01 6 views
5

Mam problem. Załóżmy, że mam 2 klasy nadrzędne. Obaj dziedziczą z klasy mistrzowskiej. Następnie obie klasy są rodzicami klasy dziecka. Czy istnieje sposób, aby dowiedzieć się (powiedzmy, że jestem Ojcem), z której klasy matki "mam dziecko"? Nie potrzebuję dziecka, aby dowiedzieć się, która klasa matek, chcę, aby Ojciec mógł dowiedzieć się, która jest klasa matki.Python: Wyobraź sobie klasę "Współmałżonka"?

Wiem, że to głupi przykład, ale jest to uproszczona wersja tego, co muszę zrobić gdzie indziej.

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

Nawet Python nie jest wystarczająco silne, aby dowiedzieć się małżonka. –

Odpowiedz

6

Można użyć __bases__:

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

(ten wróci nazwiska wszystkich "małżonkiem" klas, jeśli istnieje więcej niż jeden).

+0

Ta praca jest idealnie! Dzięki! –

+1

@ user1137940 - Jeśli to rozwiązanie działa (zgodnie z twoim wskazaniem), powinieneś je zaakceptować (kliknij mały znacznik wyboru obok niego). To daje Davidowi trochę reputacji bonusowej (i trochę też dostajesz). Dzięki temu inni, którzy natkną się na ten post, natychmiast zobaczą, która odpowiedź jest najlepsza. (+1 ode mnie btw) – mgilson

1

Możesz zajrzeć __bases__ klasy obiektu dziecięcej, coś

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