Herencia de clases - Superclases y subclases - Curso desde cero Programación Orientada a Objetos Python - Capítulo 6


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 de clases

La herencia 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:

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)

Resultado

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.

Código

class UsuariosPremium(Usuarios):

Con esto tan simple, da el mismo efecto dejar la clase UsuariosPremium así:

Código

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 superclase.
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 superclase y a partir de ahí descendiendo al resto de subclases.


Suscríbete a mi canal de YouTube para apoyarme

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.


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.