Programación orientada a objetos en Python
Para crear una clase en Python vamos a usar la palabra clave class. Veamos un ejemplo sencillo creando una clase que no hace nada:
class MiClase():
pass
A partir de la definición de una clase podemos crear objetos que tendrán las características de la clase, para ello:
objeto1 = MiClase()
objeto2 = MiClase()
Realmente podemos pensar que cuando definimos una clase estamos creando un nuevo tipo de datos, y cuando creamos un ovjeto estamos creando una variable de ese nuevo tipo de datos:
type(objeto1)
<class '__main__.MiClase'>
Atributos de objetos
Para definir atributos de objetos, basta con definir una variable dentro de los métodos, es una buena idea definir todos los atributos de nuestras instancias en el constructor, de modo que se creen con algún valor válido.
Método constructor __init__
Como hemos visto anteriormente los atributos de objetos no se crean hasta que no hemos ejecutado el método. Tenemos un método especial, llamado constructor __init__, que nos permite inicializar los atributos de objetos. Este método se llama cada vez que se crea una nueva instancia de la clase.
Definiendo métodos. El parámetro self
El método constructor, al igual que todos los métodos de cualquier clase, recibe como primer parámetro a la instancia sobre la que está trabajando. Por convención a ese primer parámetro se lo suele llamar self (que podríamos traducir como yo mismo), pero puede llamarse de cualquier forma.
Para referirse a los atributos de objetos hay que hacerlo a partir del objeto self.
Ejemplo
Aquí tienes un ejemplo de cómo crear una clase Coche con un constructor, un atributo y un método:
class Coche:
def __init__(self, marca, modelo):
self.marca = marca # Atributo
self.modelo = modelo # Atributo
def describir(self):
# Método que imprime una descripción del coche
return "Coche: " + self.marca+ " " +self.modelo
# Crear un objeto de la clase Coche
mi_coche = Coche("Toyota", "Corolla")
# Usar el método del objeto
print(mi_coche.describir()) # Salida: Coche: Toyota Corolla
- Clase
Coche: Se define la clase que representa un coche. - Método
__init__: Este es el constructor. Inicializa los atributosmarcaymodelocuando se crea un objeto de la claseCoche. - Método
describir: Este método devuelve una cadena que describe el coche. - Objeto
mi_coche: Se crea una instancia de la claseCochecon marca “Toyota” y modelo “Corolla”. - Uso del Método: Se llama al método
describirdel objetomi_cochepara imprimir la descripción.
Herencia
La herencia permite que una clase (subclase) herede atributos y métodos de otra clase (superclase). Aquí tienes un ejemplo de herencia:
class CocheElectrico(Coche): # CocheElectrico hereda de Coche
def __init__(self, marca, modelo, autonomia):
super().__init__(marca, modelo) # Llamar al constructor de la superclase
self.autonomia = autonomia # Atributo adicional
def describir(self):
# Método que incluye la autonomía en la descripción
return "Coche eléctrico: "+ self.marca + " " + self.modelo +", Autonomía: " + str(self.autonomia) + " km"
# Crear un objeto de la clase CocheElectrico
mi_coche_electrico = CocheElectrico("Tesla", "Model S", 500)
# Usar el método del objeto
print(mi_coche_electrico.describir()) # Salida: Coche eléctrico: Tesla Model S, Autonomía: 500 km
- Clase
CocheElectrico: Hereda de la claseCoche. - Uso de
super(): Dentro del constructor deCocheElectrico, se llama al constructor deCochepara inicializar los atributosmarcaymodelo. - Atributo
autonomia: Es un atributo adicional específico de la claseCocheElectrico. - Método
describir: Se sobrescribe para incluir información sobre la autonomía del coche eléctrico.
Para terminar indicar que en Python cualquier elemento del lenguaje pertenece a una clase y todas las clases tienen el mismo rango y se utilizan del mismo modo.