2012-08-01 15 views
5

Así que aquí tengo un problema. Digamos que tengo 2 clases para padres. Ambos heredan de una clase magistral. Entonces ambos son clases principales para una clase infantil. ¿Hay alguna manera de descubrir (digamos que soy padre) con qué clase de madre estoy "teniendo un hijo"? No necesito que el niño sepa qué clase de madre, quiero que el padre pueda descubrir qué clase de madre es.Python: averiguar la clase "Cónyuge"?

Sé que este es un ejemplo tonto, pero es una versión simplificada de lo que tengo que hacer en otros lugares.

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

Incluso Python no es lo suficientemente potente como para averiguar un cónyuge. –

Respuesta

6

Puede utilizar __bases__:

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

(Esto devolvería los nombres de todas las clases "cónyuge" si hay más de uno).

+0

¡Ese trabajo es perfecto! ¡Gracias! –

+1

@ user1137940 - Si esta solución funciona para usted (como ha indicado), debe aceptarla (haga clic en la pequeña marca de verificación junto a ella). Eso le da a David una pequeña reputación de bonificación (y tú también obtienes un poco). Además, permite que otros que se encuentren con esta publicación puedan ver de inmediato qué respuesta es la mejor. (+1 de mí por cierto) – mgilson

1

se puede ver en __bases__ de la clase del objeto secundario, algo así como

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