Clases y objetos en Python, para entendernos.
En Python todo es un objeto, lo que facilita mucho las cosas a la hora de programar. En este post vamos a ver lo sencilo que resulta trabajar con este paradigma de programación.
No voy a hablar aquí de las ventajas de la orientanción a objetos, entre otras cosas porque me llevaría varias horas, y si has llegado hasta aquí, es que algo del tema sabes, seguro.
La mejor forma de ver un tema de estos (y todos creo yo en la informática) es experimentando, así que la teoría la vamos a ver con ejemplos, que es verdaderamente donde vemos la realidad de las cosas. Lo importante es experimentar, ¡sentir como el código fluye por nuestras retinas!.
Es más, la informática, en mi humilde opinión, hay que verla y entenderla desde un punto de vista filosófico, al más puro estilo de David Hume (tan maltratado por la historia), en donde el conocimiento humano proviene de los sentidos, de las percepciones (ideas e impresiones).
No voy a hablar aquí de las ventajas de la orientanción a objetos, entre otras cosas porque me llevaría varias horas, y si has llegado hasta aquí, es que algo del tema sabes, seguro.
La mejor forma de ver un tema de estos (y todos creo yo en la informática) es experimentando, así que la teoría la vamos a ver con ejemplos, que es verdaderamente donde vemos la realidad de las cosas. Lo importante es experimentar, ¡sentir como el código fluye por nuestras retinas!.
Es más, la informática, en mi humilde opinión, hay que verla y entenderla desde un punto de vista filosófico, al más puro estilo de David Hume (tan maltratado por la historia), en donde el conocimiento humano proviene de los sentidos, de las percepciones (ideas e impresiones).
«Con el término impresión me refiero a nuestras más vívidas impresiones, cuando oímos, o vemos, o sentimos, o amamos, u odiamos, o deseamos. Y las impresiones se distinguen de las ideas, que son impresiones menos vívidas de las que somos conscientes cuando reflexionamos sobre alguna de las sensaciones anteriormente mencionadas».
«Una proposición que no parece admitir muchas disputas es que todas nuestras ideas no son nada excepto copias de nuestras impresiones, o, en otras palabras, que nos resulta imposible pensar en nada que no hayamos sentido con anterioridad, mediante nuestros sentidos externos o internos».
Una clase en Python se puede definir de la siguiente manera:
class nombre_clase(object):
pass
Esta clase hereda del objecto object, el cual es un objeto vacío. (No voy a hablar aquí de nuevos estilos y demás, ya que no quiero liar este tema). Podemos ver que es una clase que no tiene nada, es una clase vacía. Vamos a incluir un método a esta clase.
class nombre_clase(object):
def metodo_1(self):
pass
Ahora tenemos una clase con un método. Esto es lo que me fascina de Python!!! Dime en qué lenguaje se usa menos código para representar una clase!!!
Bien, ahora, vamos a incluir un constructor, o lo que más se parezca a un constructor de la clase.(Veremos más adelante que técnicamente no es un constructor, pero sí donde podemos poner código de inicialización).
Bien, ahora, vamos a incluir un constructor, o lo que más se parezca a un constructor de la clase.(Veremos más adelante que técnicamente no es un constructor, pero sí donde podemos poner código de inicialización).
class nombre_clase(object):
def __init__(self):
'''
Constructor
'''
pass
def metodo_1(self):
pass
¿Y un destructor?
class nombre_clase(object):
def __init__(self):
'''
Constructor
'''
pass
def metodo_1(self):
pass
def__del__(self):
'''
Destructor
'''
pass
Lo básico para empezar a trabajar con POO lo acabamos de ver!!! ¿Veis lo sencillo que es definir una clase? Sabemos definir una clase, hemos definido métodos, su constructor (por el momento será el constructor, aunque ténicamente no lo es) y su destructor. Seguimos incluyendo conceptos. Vamos a ver ahora una clase real, y como instanciar una clase, esto es, crear un objeto. Creo que ayer estuve en una tienda de muebles, así que hoy toca tema mueble. Vamos a escribir una clase que defina el concepto de mueble (para el hogar). Definimos la clase mueble:
# Instanciamos la clase (creamos un objeto).
silla = mueble('rojo','madera',[50,60])
Podemos observar, mediante IDLE, los atributos y métodos de nuestra clase. Los atributos y métodos que comienzan por dos guiones bajos (__) son de acceso privado. En Python no hay modificadores de acceso como en C# ó Java (public ó private). Es por ello que IDLE no lo muestra al intentar completar el código.
Traceback (most recent call last):
File "D:/python/poo/mueble.py", line 42, in
print silla.__precio
AttributeError: 'mueble' object has no attribute '__precio'
>>> silla.__precio = 500
>>> print silla.__precio
500
>>> print silla._mueble__precio
500
silla.color = 'verde'
Podemos acceder directamente a un atributo, para obtener información.
>>> print silla.color
verde
Para acceder a un método es tan simple como:
print silla.precio_final()
ó
silla.precio_mueble(1000, 16)
>>> print silla.basura
Traceback (most recent call last):
File "D:/python/poo/mueble.py", line 42, in
AttributeError: 'mueble' object has no attribute 'basura'
class silla(mueble):
pass
# Instanciamos.
mueble_silla = silla(4,False,True,'verde','madera',[30,50])
# Imprimimos información.
print "Caracrerísticas del mueble:"
print "Tamaño....: ", mueble_silla.tamanyo
print "Color.....: ", mueble_silla.color
print "Material..: ", mueble_silla.material
print "Nº patas..: ", mueble_silla.patas
print "Respaldo..: ", "Si" if mueble_silla.respaldo else "No"
print "Posabrazos: ", "Si" if mueble_silla.posabrazos else "No"
Herencia múltiple en Python

CONCLUSIONES
Como hemos visto trabajar con POO no es complicado, y ahorra mucho tiempo. Si he hecho ejemplos más largos ha sido para que el lector pueda ver que se puede hacer mucho más de lo que se imagina. La herencia múltiple es una herramienta muy poderosa, pero extraordinariamente peligrosa si no se utiliza con propiedad. Esto es, hay que tener ciertas convenciones a la hora de nombrar métodos (para que no se solapen, ¡no hay polimorfismo!) y atributos, por supuesto. Cuando quieras controlar todos los atributos de todas las clases de las cuales se heredan, una solución (yo conozco esta) es inicializar los constructores de las clases deseadas.
Muchisimas gracias por la ayuda ;)
ResponderEliminarEsta muy bueno el tuto gracias por compartir !
ResponderEliminarquien me ayuda con un ejercio
ResponderEliminar. Crea una clase Hora con atributos para las horas, los minutos y los segundos de la hora.
ResponderEliminarIncluye, al menos, los siguientes métodos:
Constructor predeterminado con el 00:00:00 como hora por defecto.
Constructor parametrizado con horas, minutos y segundos.
leer(): pedirá al usuario las horas, los minutos y los segundos.
valida(): comprobará si la hora es correcta; si no lo es la ajustará. Será un método
auxiliar (privado) que se llamará en el constructor parametrizado y en leer().
Accedentes y mutadores.
print(): mostrará la hora (07:03:21).
aSegundos(): devolverá el número de segundos transcurridos desde la medianoche.
deSegundos(int): hará que la hora sea la correspondiente a haber transcurrido
desde la medianoche los segundos que se indiquen.
segundosDesde(Hora): devolverá el número de segundos entre la hora y la
proporcionada.
siguiente(): pasará al segundo siguiente.
anterior(): pasará al segundo anterior.
copia(): devolverá un clon de la hora.
igualQue(Hora): indica si la hora es la misma que la proporcionada.
menorQue(Hora): indica si la hora es anterior a la proporcionada.
mayorQue(Hora): indica si la hora es posterior a la proporcionada
en python
quien me ayuda lo mas rapido posible
ResponderEliminarsi alguno tiene el ejercicio me lo puede pasar lo agradesco gracia
ResponderEliminarmi coreo es
ResponderEliminarel.cacasa152008@hotmail.com
si alguien realizo el ejercicio de carlos me puede hacerme el favor de enviarlo a maesal1997@gmail.com de antemano muchas gracias
ResponderEliminar