La herencia de clases en Python
Capítulo 6: Herencia de clases - Superclases y subclases - POO Python
En este capítulo aprenderás la herencia de clases. Con esto podrás crear superclases y subclases que hereden atributos y métodos de estas.
La herencia en la programación orientada a objetos y en Python, consiste en crear clases padre o superclases para que las clases hijo o subclases hereden ciertas propiedades de estas.
Seguimos con estas dos clases Usuarios y UsuariosPremium (que solo aparecía en el vídeo del capítulo anterior) Ambas independientes sin ningún tipo de herencia.
Si instanciamos un usuario de la clase Usuarios como este de aquí, podemos comprobar que obtiene el tipo de usuario free, en cambio, si esta cuenta de usuario estuviese creada a partir de la clase premium, obtendría el valor premium en tipo de usuario y por lo tanto, si es free tendrá publicidad y si es premium no.
Aquí tienes el código:
class Usuarios:
tipo_usuario = "Free"
publicidad = True
def __init__(self, nid, alias, nombre, apellidos):
self.nid = nid
self.alias = alias
self.nombre = nombre
self.apellidos = apellidos
def muestra_datos(self):
print("El nombre y los apellidos del usuario son: " + self.nombre, self.apellidos)
print("El ID de usuario es: " + self.nid + ".")
print("El alias del usuario es: " + self.alias + ".")
class UsuariosPremium:
tipo_usuario = "Premium"
publicidad = False
def __init__(self, nid, alias, nombre, apellidos):
self.nid = nid
self.alias = alias
self.nombre = nombre
self.apellidos = apellidos
def muestra_datos(self):
print("El nombre y los apellidos del usuario son: " + self.nombre, self.apellidos)
print("El ID de usuario es: " + self.nid + ".")
print("El alias del usuario es: " + self.alias + ".")
usuario1 = Usuarios("001", "raulito43", "Raúl", "Fernández Gomila")
usuario1.muestra_datos()
print(usuario1.tipo_usuario)
El nombre y los apellidos del usuario son: Raúl Fernández Gomila
El ID de usuario es: 001.
El alias del usuario es: raulito43.
Free
Hasta aquí todo esto estaba más o menos explicado. Ahora pasamos al tema en cuestión.
Si te has fijado, lo único que cambia entre estas dos clases es el nombre por supuesto y los dos valores de los atributos de clase, pero son casi idénticas salvo estos detalles.
Bien, lo que conviene en estos casos es aprovechar la herencia para no tener que estar repitiendo atributos y métodos que son comunes para ambas clases.
Para hacer que UsuariosPremium herede de Usuarios lo debes hacer añadiéndole unos paréntesis con el nombre de la clase de la que quieres heredar.
class UsuariosPremium(Usuarios):
Con esto tan simple, da el mismo efecto dejar la clase UsuariosPremium así:
class UsuariosPremium(Usuarios):
tipo_usuario = "Premium"
publicidad = False
Solo tienes que dejar los atributos o métodos que sean diferentes o tengan valores diferentes a los de la super clase.
Aquí he conseguido especificar con sólo dos atributos toda la clase y ahorrado un montón de código repetido.
Por si no te has fijado, los atributos o métodos que lleven el mismo nombre con valores diferentes, serán sustituidos en cada subclase.
Por supuesto, puedes ir creando subclases de otras subclases. Al final todas irán obteniendo la herencia en orden jerárquico, prevaleciendo la super clase y a partir de ahí descendiendo al resto de subclases.
Comentarios
Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.