Curso de POO en Python desde cero

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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.