Dungeon of Bits
Aprendiendo informática.
Dungeon of Bits

Clases en Python

En este tutorial vamos a ver cómo crear clases en Python y trabajar con instancias de las mismas, además de usar herencia y herencia múltiple.

Python

Requisitos:

Para realizar esta práctica tan solo necesitamos un sistema con Python instalado. En nuestro caso vamos a utilizar un equipo con Ubuntu 22.04 LTS y Pycharm como framework de trabajo.

Para instalar Pycharm desde Ubuntu tan solo necesitamos teclear la instrucción:

sudo snap install pycharm-community --classic

Crear proyecto en Pycharm:

Al arrancar Pycharm podemos crear un nuevo proyecto, el programa nos dejará escoger el nombre del proyecto y el directorio donde estarán los ficheros, además nos dejará escoger la versión de Python que utilizaremos, en este caso será la 3.10 y el entorno virtual, usaremos Venv.

Clases en Python

Clases en Python:

Las clases en Python tienen nombres comenzados por mayúsculas, vamos a crear una clase nueva llamada Vehículo, de momento solamente tendrá dos atributos llamados nombre y movimiento.

También tendrá un método que nos muestra los atributos del objeto llamada descripcion.

class Vehiculo:

   def __init__(self, nombre, movimiento):
       self.nombre = nombre
       self.movimiento = movimiento

   def descripcion(self):
       d = "Nombre de vehículo: {}, velocidad: {}."
       print(d.format(self.nombre, self.movimiento))

if __name__ == '__main__':
   #creamos un vehículo coche:
   v1 = Vehiculo("coche", 90)   
   # creamos un vehículo velero:
   v2 = Vehiculo("velero", 30)
   #Mostramos la descripción de los vehículos:
   v1.descripcion()
   v2.descripcion()

En el programa anterior hemos creado dos objetos de la clase Vehiculo v1 y v2, se trata de dos instancias diferentes de la misma clase, cada una de ellas única.

Clases en Python

Añadir métodos a una clase:

Ahora crearemos dos métodos para cambiar los valores de los atributos de la clase modificar_nombre y modificar_movimiento, lo que vendrían a ser los setters de clase.

class Vehiculo:

   def __init__(self, nombre, movimiento):
       self.nombre = nombre
       self.movimiento = movimiento

   def descripcion(self):
       d = "Nombre de vehículo: {}, velocidad: {}."
       print(d.format(self.nombre, self.movimiento))

   def modificar_nombre(self,n):
       self.nombre = n

   def modificar_movimiento(self,m):
       self.movimiento = m

if __name__ == '__main__':
   #creamos un vehículo coche:
   v1 = Vehiculo("coche", 90)
   v1.descripcion()
   v1.modificar_nombre("Lamborghini")
   v1.modificar_movimiento(200)
   v1.descripcion()

Clases en Python

Herencia:

Cuando una clase deriva de otra hereda sus atributos y métodos, por ejemplo, crearemos la clase VehiculoAereo que es una clase hija de Vehiculo y que hereda todo de ella.

Además incorpora un atributo nuevo llamado medio que tendrá el valor "Aire” cuando se cree una instancia de la clase.

class Vehiculo:

   def __init__(self, nombre, movimiento):
       self.nombre = nombre
       self.movimiento = movimiento

   def descripcion(self):
       d = "Nombre de vehículo: {}, velocidad: {}."
       print(d.format(self.nombre, self.movimiento))

class VehiculoAereo(Vehiculo):
   medio = "Aire"


if __name__ == '__main__':
   #creamos un vehículo coche:
   v1 = VehiculoAereo("Helicóptero", 60)
   v1.descripcion()

Como vemos en la clase VehiculoAereo se indica, entre paréntesis, que la clase base es Vehiculo así que ha heredado sus atributos y métodos.

Herencia múltiple:

Una clase puede derivar de más de una clase heredando sus métodos y atributos.

En el ejemplo siguiente la clase VehiculoTerrestre es heredera de las clases Vehiculo y motor y por tanto tendrá 4 atributos heredados de ambas clases.

El constructor de la nueva clase llama a los constructores de las clases padre y tiene un método que nos da su descripción:

class Vehiculo:

   def __init__(self, nombre, movimiento):
       self.nombre = nombre
       self.movimiento = movimiento

class Motor:
   def __init__(self, nombre, consumo):
       self.nombre_motor = nombre
       self.consumo = consumo

class VehiculoTerrestre(Vehiculo,Motor):
   def __init__(self, nombre, movimiento, nombre_motor, consumo):
       Vehiculo.__init__(self,nombre, movimiento)
       Motor.__init__(self,nombre_motor, consumo)


   def descripcion(self):
       d = "Nombre de vehículo: {}, velocidad: {}, utiliza el motor {} y consume {} unidades de combustible."
       print(d.format(self.nombre, self.movimiento, self.nombre_motor, self.consumo))

if __name__ == '__main__':
   #creamos un vehículo coche:
   v1 = VehiculoTerrestre("Citroën Mehari", 60,"gasolina",6)
   v1.descripcion()

Clases en Python

Para indicar que la clase hereda de otras dos se incorpora el nombre de ellas entre paréntesis:

class VehiculoTerrestre(Vehiculo,Motor):