Curso de POO en Python desde cero

El uso de la herencia en Python con super()

Capítulo 7: Herencia de clases - cómo utilizar super() - POO Python

Seguimos con la herencia de clases. Esta vez, te enseño a importar cosas de la superclase con super().

Es importante que veas el vídeo para poder entender a la perfección este tema.

Mira el siguiente código. Tenemos tres clases, Usuarios, UsuariosPremium y UsuariosPremiumPlus.

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
	participacion_sorteos = 10


class UsuariosPremiumPlus(UsuariosPremium):
		participacion_sorteos = 25

De estas clases, es muy importante que sepas de qué clase hereda cada una.
La subclase UsuariosPremium hereda de la superclase Usuarios. La subclase UsuariosPremiumPlus hereda de su superclase UsuariosPremium, no de Usuarios.

Reemplazar herencia del método __init__ en Python

Se puede poner un __init__ en una subclase. Pero como ya sabes, los métodos se sobrescriben con la herencia, es decir, un __init__ en la subclase UsuariosPremium, va a hacer que el otro de la superclase se sobrescriba en su herencia. Por lo que quiere decir, que cada clase puede tener herencia, pero conservar los métodos y atributos propios que se deseen.

class UsuariosPremium:
		def __init__(self, participacion_sorteos, puntos_premios):
			self.participacion_sorteos = participacion_sorteos
			self.puntos_premios = puntos_premios
			self.contenido_premium = True

Esto es un problema, ya que nos va a sobrescribir todo el método __init__ y yo lo que quiero es que se puedan aprovechar todo el método __init__ de la clase Usuarios y además utilizar los de esta clase (UsuariosPremium). Para poder utilizar características del __init__ de Usuarios y las propias de UsuariosPremium lo puedes hacer utilizando super().

Aquí tienes un ejemplo:

class UsuariosPremium:
		def __init__(self, participacion_sorteos, puntos_premios):
			self.participacion_sorteos = participacion_sorteos
			self.puntos_premios = puntos_premios
			self.contenido_premium = True
			super().__init__(nid, alias, nombre, apellidos)

Con esta última línea estoy añadiendo en una línea todo lo que quiero del método __init__ de la clase Usuarios que ha sido reescrito al declarar un método __init__ en UsuariosPremium.

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.