Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/01/2015, 13:40
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ¿Herencia múltiple en Taxonomía de animales?

No soy un experto en biología animal, pero que no la taxonomía se representa muy bien con herencia simple? Después de todo te lo ponen con un árbol.



Haciendo la herencia múltiple inpractica. Ademas no veo en ningún lugar la herencia múltiple. Siempre heredas de una sola clase en todas tus clases.

Ejemplo sencillo de herencia múltiple:
Código Python:
Ver original
  1. class A(object):
  2.     def a(self):
  3.         print "A"
  4.  
  5. class B(object):
  6.     def b(self):
  7.         print "B"
  8.  
  9. class C(A, B):
  10.     def c(self):
  11.         print "C"
  12.         self.b()
  13.         self.a()
  14.  
  15. c = C()
  16. c.c()

Lo interesante de la herencia múltiple es orden de resolución de los métodos y atributos.

Por ejemplo, aquí vemos como imprime C, B, A:
Código Python:
Ver original
  1. class A(object):
  2.     def __init__(self):
  3.         super(A, self).__init__()
  4.         print "A"
  5.  
  6. class B(object):
  7.     def __init__(self):
  8.         super(B, self).__init__()
  9.         print "B"
  10.  
  11. class C(A, B):
  12.     def __init__(self):
  13.         print "C"
  14.         super(C, self).__init__()
  15.  
  16. C()

Pero si cambiamos el orden.
Código Python:
Ver original
  1. class C(B, A):
  2.     def __init__(self):
  3.         print "C"
  4.         super(C, self).__init__()
Obtenemos C, A, B

Pero si vemos el mro. C.mro() vemos que la resolución esta al revés, esto es porque es importante también la llamada a super de los métodos.

Código Python:
Ver original
  1. class A(object):
  2.     def __init__(self):
  3.         print "A"
  4.         super(A, self).__init__()
  5.  
  6. class B(object):
  7.     def __init__(self):
  8.         print "B"
  9.         super(B, self).__init__()
  10.  
  11. class C(A, B):
  12.     def __init__(self):
  13.         print "C"
  14.         super(C, self).__init__()
  15.  
  16. C()

Si quieres aprender mas de mro te recomiendo ver la documentación.
https://www.python.org/download/releases/2.3/mro/

O tomar un libro de python donde expliquen a detalle herencia múltiple. Lamentablemente no hay tanto material en español como lo hay en ingles. Así que buena suerte con eso.