2010-07-04 19 views
6

He aquí algo de lo que he tenido dudas. Considere el siguiente fragmento.paradigma OOPs en Python

class A(object): 
    def check(self): 
     super(A, self).check() 
     print "inside a" 

class B(object): 
    def check(self): 
     print "inside b" 

class C(A, B): 
    pass 

c = C() 
c.setup() 

Ahora bien, esto da la salida,

inside b 
inside a 

La superación de esta a través de pdb veo que al llegar A.setup(), B.setup() se está llamando. Sin embargo, la llamada de A es al método de verificación de su superclase; como no existe, la llamada se mueve desde ese punto a B.check().

  1. ¿Alguien podría explicarme o señalarme un documento que explique cómo funciona esto internamente? No pude encontrar ninguno.
  2. ¿Podría alguien mostrarme una implementación similar en C++/Java? Creo que compararlo con otros idiomas me ayudaría a entender mejor el problema.

Muchas gracias.

+3

Por lo que vale, Guido tiene un blog en el que nos cuenta un poco sobre la historia de Python. En un artículo reciente, él habla sobre la Orden de Resolución de Método: http://python-history.blogspot.com/2010/06/method-resolution-order.html –

Respuesta

9

El algoritmo se explica en this excellent article.

En resumen,

super(A,self) se ve en self.__class__.__mro__ para la próxima clase despuésA.

En su caso, self es , entonces self.__class__ es C. C.__mro__ es [C,A,B,object]. Entonces la próxima clase en el MRO después de A pasa a ser B.

super(A,self) devuelve un objeto super que se comporta como B en lo que se refiere a la búsqueda de atributos.

super(A, self).check() así llamadas B.check().

The C3 algorithm Python utiliza para generar el orden de resolución de método (MRO) también se describe con un poco más de detalle en this essay por Michele Simionato.

+0

+1 por retrasar mis actividades del cuarto de julio con una "¡oh mierda! No puedo dejar de leer este "artículo". – sdolan

+0

Oh, sí, a mi familia le encanta cuando les entrego toda la historia de la búsqueda de atributos de Python mientras vemos el gran salvapantallas en el cielo. – unutbu

Cuestiones relacionadas