Herencia de clases - cómo utilizar super() - Curso desde cero Programación Orientada a Objetos Python - Capítulo 7


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 estre tema.

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

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
	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__

Se puede poner una clase init en una subclase. Pero como ya sabes, los métodos se sobreescriben con la herencia, es decir, un __init__ en la subclase UsuariosPremium, va a hacer que el otro de la superclase se sobreescriba 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.

Código

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 sobreescribir 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:

Código

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.


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.