En el post anterior vimos como crear una clase en Python. Comparado con lenguajes como Java es bastante sencillo.
/*Java*/
public class Submarino{
private java.util.List<String> tripulacion;
public Submarino(){}
//getters y setters
...
...
}
'''
Python
'''
class Submarino(object):
def __init__(self,tripulacion):
self.tripulacion=tripulacion
Esto solo para crear una clase, pero si necesito que una clase herede atributos y método de una clase ... ¿existe la herencia en Python?. La respuesta es si.
#clase Padre
class Submarino(object):
def tipo(self):
print "submarino militar"
#clase hija
class Submarino_Juguete(Submarino):
def tipo(self):
print "submarino de juguete"
#main
submarinoJuguete=Submarino_Juguete()
submarinoJuguete.tipo()
print "tipo clase: ",type(submarinoJuguete) #tipo Submarino_Juguete
La clase hija 'Submarino_Juguete' hereda de la clase padre 'Submarino' sus atributos y propiedades.Además de poseer los suyos.
#ahora actúa como clase padre
class Submarino_Juguete(Submarino):
def __init__(self,marca):
self.marca=marca
print "Submarino_Juguete"
def tipo(self):
print "submarino de juguete"
#clase hija
class Submarino_Madera(Submarino_Juguete):
def __init__(self):
print "Submarino_Madera"
#main
submarinoMadera=Submarino_Madera()
submarinoMadera.tipo()
La clase 'Submarino_Juguete' también puede actuar como clase padre, en este caso de la clase 'Submarino_Madera'.
Method Resolution Order
Básicamente se trata de una forma para hallar el método correcto en clases que tienen múltiples herencias.
#clase padre
class Serpiente_Reyna(object):
def aviso(self):
print "Serpiente Reyna ... activa"
#clase hija de 'Serpiente_Reyna'
class Serpiente_Roja(Serpiente_Reyna):
def aviso(self):
print "Serpiente Roja ... detenida"
#clase hija de 'Serpiente_Reyna'
class Serpiente_Azul(Serpiente_Reyna):
def aviso(self):
print "Serpiente Azul ... esperando"
#clase con múltiple herencia
class Contenedor_Serpientes(Serpiente_Azul,Serpiente_Roja):
pass
#main
azul=Serpiente_Azul()
roja=Serpiente_Roja()
contenedor=Contenedor_Serpientes()
azul.aviso()
roja.aviso()
contenedor.aviso()
'''
en contenedor.aviso() se mostrará: Serpiente Azul ... esperando
'''
#con esto podemos ver el orden
print Contenedor_Serpientes.__mro__
Salida:
Serpiente Azul ... esperando
Serpiente Roja ... detenida
Serpiente Azul ... esperando
(<class '__main__.Contenedor_Serpientes'>, <class '__main__.Serpiente_Azul'>, <class '__main__.Serpiente_Roja'>, <class '__main__.Serpiente_Reyna'>, <type 'object'>)
Links
http://python-history.blogspot.mx/2010/06/method-resolution-order.html
http://mundogeek.net/archivos/2008/03/05/python-orientacion-a-objetos/
https://www.python.org/download/releases/2.3/mro/
http://stackoverflow.com/questions/1848474/method-resolution-order-mro-in-new-style-python-classes
Comentarios
Publicar un comentario