Herencia

La herencia es un concepto poderoso en la programación orientada a objetos. Es una forma de organizar el código y es especialmente útil cuando tienes varias clases relacionadas entre sí. La herencia permite que una clase herede todos los métodos y propiedades de otra clase, lo que promueve la reutilización de código y establece relaciones lógicas entre las clases.
Para demostrar el uso de la herencia en Python, consideremos un zoológico como ejemplo. Un zoológico tiene varios animales como perros, gatos y aves. Aunque estos animales tienen comportamientos únicos, también comparten algunas características comunes. En este escenario, la herencia puede ayudarnos a evitar la repetición de código y a organizar mejor el código. Veamos cómo:
class Animal:                                         # Definición de la clase base Animal
    def __init__(self, name, age):                    # Método constructor con parámetros name y age
        self.name = name                              # Asignación del atributo name
        self.age = age                                # Asignación del atributo age

    def eat(self):                                    # Método común eat
        return f'{self.name} is eating.'

    def make_sound(self):                             # Método común make_sound
        return f'{self.name} makes a sound.'

class Dog(Animal):                                    # Definición de la clase Dog que hereda de Animal
    def make_sound(self):                             # Sobrescritura del método make_sound
        return f'{self.name} barks.'

class Cat(Animal):                                    # Definición de la clase Cat que hereda de Animal
    def make_sound(self):                             # Sobrescritura del método make_sound
        return f'{self.name} meows.'

class Bird(Animal):                                   # Definición de la clase Bird que hereda de Animal
    def eat(self):                                    # Sobrescritura del método eat para Bird
        return f'{self.name} is pecking at its food.'

    def make_sound(self):                             # Sobrescritura del método make_sound
        return f'{self.name} chirps.'

# El método __init__ se hereda de Animal
# pero también puedes definir __init__ en cualquiera de las clases heredadas
dog = Dog('Rex', 5)                                   # Creación de una instancia de Dog
cat = Cat('Whiskers', 3)                              # Creación de una instancia de Cat
bird = Bird('Tweety', 2)                              # Creación de una instancia de Bird

for animal in [dog, cat, bird]:                       # Iterando sobre las instancias
    print(animal.eat())                               # Llamando al método heredado o sobrescrito eat
    print(animal.make_sound())                        # Llamando al método sobrescrito make_sound
    print('-----')
El resultado sería:
Rex is eating.
Rex barks.
-----
Whiskers is eating.
Whiskers meows.
-----
Tweety is pecking at its food.
Tweety chirps.
-----
En el código anterior, Animal es la clase padre, mientras que Dog, Cat y Bird son clases hijas. Las clases hijas heredan todos los métodos de la clase Animal. Sin embargo, cada clase hija sobrescribe el método make_sound, ya que el sonido que hace cada animal es único. También sobrescribimos el método eat en la clase Bird porque la forma en que las aves comen es diferente al comportamiento general definido en la clase Animal.
Este enfoque nos permite representar objetos del mundo real y sus relaciones de manera más efectiva, creando así un código claro, conciso y fácil de mantener. La herencia nos permite disfrutar de los beneficios de la reutilización de código y la reducción de la complejidad.

Desafío: Clases Person y Employee

Se te solicita crear dos clases: Person y Employee.
La clase Person debe contener los siguientes atributos:
  • name: Una cadena que representa el nombre de la persona.
  • age: Un entero que representa la edad de la persona.
La clase Person también debe contener el siguiente método:
  • introduce_yourself(): Este método imprime una cadena con el siguiente formato: "My name is {name} and I am {age} years old."

La clase Employee debe heredar de la clase Person y agregar el siguiente atributo:
  • job_title: Una cadena que representa el puesto de trabajo de la persona.
La clase Employee también debe sobrescribir el siguiente método:
  • introduce_yourself(): Este método imprime una cadena con el siguiente formato: "My name is {name}, I am {age} years old, and my job title is {job_title}."
Entrada
Salida
alice=Person('Alice', 25); alice.introduce_yourself(); bob=Employee('Bob', 30, 'Engineer'); bob.introduce_yourself();
My name is Alice and I am 25 years old. My name is Bob, I am 30 years old, and my job title is Engineer.
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue