Contenido del Curso
Programación Orientada a Objetos en Python a Fondo
Programación Orientada a Objetos en Python a Fondo
¿Qué es la Herencia?
En Python, la herencia es uno de los conceptos fundamentales de la programación orientada a objetos (POO). Se refiere a la capacidad de una subclase para heredar propiedades y comportamientos (es decir, métodos y atributos) de una clase padre. La herencia permite la reutilización de código y ayuda a crear una estructura jerárquica de clases, en la que las subclases pueden especializarse o ampliar la funcionalidad de sus clases padre.
Para heredar una subclase de otra clase, puede escribir su nombre entre paréntesis ()
después del nombre de la subclase (sin espacio):
class User: role = "User" class Staff(User): pass print(Staff.role)
Este código demuestra que las clases hijo pueden acceder a los atributos de sus clases padre, permitiéndoles utilizarlos o anularlos según sea necesario.
Nota
El intérprete busca atributos desde el Child hasta el último Parent en orden.
Mira el ejemplo de código:
class User: role = "User" def __init__(self, name): self.name = name def print_name(self): print(f"Is a {self.role} with the name {self.name}") class Staff(User): pass bob = Staff("Bob") bob.print_name() # takes `print_name()` from the `User` class print(bob.role) # takes `role` from the `User` class
El código accede entonces al atributo role
de la instancia bob
usando bob.role
. Como el atributo role
no está definido en la clase Staff
ni en la instancia bob
, se recurre al atributo role
de la clase User
, y se imprime "User".
En resumen, este código demuestra cómo los atributos de clase pueden ser heredados y accedidos por instancias, así como cómo los atributos de instancia son únicos para cada instancia.
class User: role = "User" def __init__(self, name): self.name = name def print_name(self): print(f"Is a {self.role} with the name {self.name}") class Staff(User): role = "Staff" bob = Staff("Bob") bob.print_name() # takes `print_name()` from the `User` class print(bob.role) # takes `role` from the `Staff` class
De forma similar, cuando se llama a print(bob.role)
, se accede al atributo role
de la clase Staff
, que ha sobreescrito el atributo role
de la clase User
. Como resultado, saldrá "Staff".
¡Gracias por tus comentarios!