2012-08-01 3 views
5

Quindi qui ho un problema. Diciamo che ho 2 classi genitore. Entrambi ereditano da una master class. Quindi sono entrambe le classi genitore in una classe figlio. C'è un modo per capire (diciamo che sono padre) quale classe madre sto "avendo un figlio con?" Non ho bisogno che il bambino capisca quale classe di madre, voglio che il Padre sia in grado di capire quale classe di madre sia.Python: scopri la classe "Spouse"?

So che questo è un esempio stupido, ma è una versione semplificata di ciò che devo fare altrove.

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

Anche Python non è abbastanza potente per capire un coniuge. –

risposta

6

È possibile utilizzare __bases__:

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

(Questo sarebbe restituire i nomi di tutte le "coniuge" classi se ci sono più di uno).

+0

Questa opera è perfetta! Grazie! –

+1

@ user1137940 - Se questa soluzione funziona per te (come hai indicato), devi accettarlo (fai clic sul piccolo segno di spunta accanto ad esso). Questo dà a David una piccola reputazione in più (e anche tu ne ottieni un po '). Inoltre, permette agli altri che si imbattono in questo post di vedere immediatamente quale risposta è la migliore. (+1 da me btw) – mgilson

1

si può guardare __bases__ della classe dell'oggetto bambino, qualcosa di simile a

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