Herança

A herança é um conceito poderoso na programação orientada a objetos. É uma maneira de organizar o código e é particularmente útil quando se tem várias classes que estão relacionadas entre si. A herança permite que uma classe herde todos os métodos e propriedades de outra classe, promovendo a reutilização de código e relações lógicas entre as classes.
Para demonstrar o uso da herança em Python, vamos considerar um zoológico como exemplo. Um zoológico tem diversos animais como cães, gatos e pássaros. Embora esses animais tenham comportamentos únicos, eles também compartilham algumas características comuns. Nesse cenário, a herança pode nos ajudar a evitar a repetição de código e tornar o código mais organizado. Vamos ver como:
class Animal:                                         # Definindo a classe base Animal
    def __init__(self, name, age):                    # Método construtor com os parâmetros name e age
        self.name = name                              # Atribuindo o atributo name
        self.age = age                                # Atribuindo o atributo age

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

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

class Dog(Animal):                                    # Definindo a classe Dog que herda de Animal
    def make_sound(self):                             # Sobrescrevendo o método make_sound
        return f'{self.name} barks.'

class Cat(Animal):                                    # Definindo a classe Cat que herda de Animal
    def make_sound(self):                             # Sobrescrevendo o método make_sound
        return f'{self.name} meows.'

class Bird(Animal):                                   # Definindo a classe Bird que herda de Animal
    def eat(self):                                    # Sobrescrevendo o método eat para Bird
        return f'{self.name} is pecking at its food.'

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

# O método __init__ é herdado de Animal
# mas você pode ter __init__ para qualquer uma das classes herdadas também
dog = Dog('Rex', 5)                                   # Criando uma instância de Dog
cat = Cat('Whiskers', 3)                              # Criando uma instância de Cat
bird = Bird('Tweety', 2)                              # Criando uma instância de Bird

for animal in [dog, cat, bird]:                       # Iterando sobre as instâncias
    print(animal.eat())                               # Chamando o método herdado ou sobrescrito eat
    print(animal.make_sound())                        # Chamando o método sobrescrito make_sound
    print('-----')
A saída seria:
Rex is eating.
Rex barks.
-----
Whiskers is eating.
Whiskers meows.
-----
Tweety is pecking at its food.
Tweety chirps.
-----
No código acima, Animal é a classe pai, enquanto Dog, Cat e Bird são classes filhas. As classes filhas herdam todos os métodos da classe Animal. No entanto, cada classe filha sobrescreve o método make_sound, pois o som que cada animal faz é único. Também sobrescrevemos o método eat na classe Bird porque o modo de comer do pássaro é diferente do comportamento geral de comer definido na classe Animal.
Essa abordagem nos permite representar objetos do mundo real e suas relações de forma mais eficaz, criando assim um código claro, conciso e fácil de manter. Portanto, a herança nos permite aproveitar os benefícios da reutilização de código e da redução da complexidade.

Desafio: Classes Person & Employee

Você é solicitado a criar duas classes Person e Employee.
A classe Person deve conter os seguintes atributos:
  • name: Uma string representando o nome da pessoa.
  • age: Um inteiro representando a idade da pessoa.
A classe Person também deve conter o seguinte método:
  • introduce_yourself(): Este método imprime uma string no seguinte formato: "My name is {name} and I am {age} years old."

A classe Employee deve herdar da classe Person e adicionar o seguinte atributo:
  • job_title: Uma string representando o cargo da pessoa.
A classe Employee também deve sobrescrever o seguinte método:
  • introduce_yourself(): Este método imprime uma string no seguinte formato: "My name is {name}, I am {age} years old, and my job title is {job_title}."
Input
Output
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