Ir al contenido principal

Python, lo bello es mejor que lo feo


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

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...