Hola a todos, hoy os voy a explicar como podemos crear clases con Python 3.
La programación orientada a objetos es un paradigma de la programación que descompone el código de una clase en unidades llamados objetos.
Un objeto es una entidad existente en la memoria del ordenador que tiene unas propiedades, llamados atributos, y unas operaciones disponibles específicas, llamados métodos.
Estos objetos vienen de clases, en realidad hasta ahora hemos usado una clase, solo que esta clase tenia un método ejecutable.
Para crear una clase en Python 3, se hace así:
class Vehiculo:
Hemos dicho que una clase tiene atributos, que es lo que define a una clase, en este caso, podemos definir un vehículo por su matricula, marca y modelo (puedes añadir los que tu quieras).
En algún momento debemos darle valores a estos atributos inicialmente y eso lo podemos hacer con los constructores. Se hace así:
class Vehiculo: def __init__(self, matricula, marca, modelo): self.matricula = matricula self.marca = marca self.modelo = modelo
Es muy importante el self para los métodos, lo vas a ver mucho.
Vamos a ver como podemos usar estos constructores.
class Vehiculo: def __init__(self, matricula, marca, modelo): self.matricula = matricula self.marca = marca self.modelo = modelo v = Vehiculo("1111AAAA", "SEAT", "IBIZA") print(v.matricula) print(v.marca) print(v.modelo)
Si yo ejecutara esto, saldría lo siguiente:
Fíjate que puedo coger los valores de los atributos directamente, por regla general, se debería hacer con un get y para modificar usamos set, pero en python, tenemos otra forma de hacerlo mas «python», vemos como se hace:
class Vehiculo: def __init__(self, matricula, marca, modelo): self.__matricula = matricula self.__marca = marca self.__modelo = modelo @property def matricula(self): return self.__matricula @matricula.setter def matricula(self, value): self.__matricula = value @property def marca(self): return self.__marca @marca.setter def marca(self, value): self.__marca = value @property def modelo(self): return self.__modelo @modelo.setter def modelo(self, value): self.__modelo = value v = Vehiculo("1111AAAA", "SEAT", "IBIZA") print("INICIAL") print(v.matricula) print(v.marca) print(v.modelo) v.marca = "BMW" v.modelo = "SERIE3" print("") print("MODIFICADO") print(v.matricula) print(v.marca) print(v.modelo)
Poner __ delante de un atributo significa que es un atributo privado y no podremos acceder desde fuera, lo haremos con un método que veremos después.
Ejecutamos y mostraría lo siguiente:
Por último, veremos como crear métodos aunque ya lo hemos visto con los get y set.
class Vehiculo: def __init__(self, matricula, marca, modelo): self.__matricula = matricula self.__marca = marca self.__modelo = modelo @property def matricula(self): return self.__matricula @matricula.setter def matricula(self, value): self.__matricula = value @property def marca(self): return self.__marca @marca.setter def marca(self, value): self.__marca = value @property def modelo(self): return self.__modelo @modelo.setter def modelo(self, value): self.__modelo = value v = Vehiculo("1111AAAA", "SEAT", "IBIZA") print("INICIAL") print(v.matricula) print(v.marca) print(v.modelo) v.marca = "BMW" v.modelo = "SERIE3" print("") print("MODIFICADO") print(v.matricula) print(v.marca) print(v.modelo) v.arrancar()
Este es el resultado:
Seguiremos viendo mas de POO en el blog, así estad atentos.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Buenas tardes,
Buen ejemplo para indicar lo básico de clases en Python. Sin embargo, hay un error que aunque no salta a la vista, sí que es grave a nivel de concepto.
Tal como has definido los atributos matricula, modelo y marca, lo has hecho como si fueran atributos de clase y no de instancia. De modo que no haría falta declarar las variables vacías después del nombre de la clase, simplemente hay que hacerlo en el __init__.
También recomendarte que le eches un vistazo a los decoradores @property y @nombreatributo.setter para demostrar la encapsulación en python, queda más limpio el código o más pythónico como se suele decir.
Un saludo.
Lo tendre en cuenta, gracias por tu comentario.