Menu
Coddy logo textTech

A Função super()

Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 18 de 64.

A função super() permite que uma classe filha chame métodos de sua classe pai. Isso permite que você estenda a funcionalidade do pai em vez de substituí-la completamente.

Aqui está um exemplo de uso do super() no construtor:

class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Animal created: {name}")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Chama o __init__ do pai
        self.breed = breed
        print(f"Dog breed set: {breed}")

Crie um objeto cachorro:

buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")

Saída:

Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever

Use super() para estender métodos pai:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Chama o método do pai primeiro
        print("Woof!")        # Adiciona comportamento específico de cachorro

Chame o método estendido:

buddy = Dog()
buddy.make_sound()

Saída:

Generic animal sound
Woof!

Sem o super(), você perderia a funcionalidade da classe pai:

class Cat(Animal):
    def make_sound(self):
        print("Meow!")  # Apenas o som do gato, o método pai é ignorado

cat = Cat()
cat.make_sound()

Saída:

Meow!

Ponto Chave: Use super() para chamar métodos da classe pai a partir de classes filhas. Isso permite que você estenda a funcionalidade em vez de substituí-la completamente. Usos comuns incluem chamar métodos __init__ da classe pai e estender o comportamento do pai.

challenge icon

Desafio

Médio

Neste desafio, você implementará uma hierarquia de classes Person e Employee usando herança.

  • person.py: Contém a classe Person com os atributos name e age
  • employee.py: Contém a classe Employee que herda de Person
  • driver.py: Arquivo principal para testar sua implementação

Cada arquivo contém comentários TODO detalhados para guiá-lo através da implementação.

Folha de consulta

A função super() permite que uma classe filha chame métodos de sua classe pai, estendendo a funcionalidade em vez de substituí-la.

Usando super() em construtores:

class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Chama o __init__ do pai
        self.breed = breed

Usando super() para estender métodos:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Chama o método do pai primeiro
        print("Woof!")        # Adiciona comportamento específico da classe filha

Sem super(): Os métodos da classe filha substituem completamente a funcionalidade do pai em vez de estendê-la.

Experimente você mesmo

# TODO: Importe a classe Person de person.py
# TODO: Importe a classe Employee de employee.py

def main():
    # TODO: Crie um objeto Person com o nome "Alice" e idade 30
    person = None
    
    # TODO: Crie um objeto Employee com o nome "Bob", idade 35 e cargo "Developer"
    employee = None
    
    # TODO: Chame o método introduce() no objeto Person
    # Saída esperada: "Hi, I'm Alice and I'm 30 years old"
    
    # TODO: Imprima uma linha em branco para espaçamento - print()
    
    # TODO: Chame o método introduce() no objeto Employee
    # Saída esperada: 
    # "Hi, I'm Bob and I'm 35 years old"
    # "I work as a Developer"

if __name__ == "__main__":
    main()
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Object Oriented Programming