0Pricing
Python Academy · Aula

Sobrescrita de métodos e super()

Sobrescreva métodos da classe pai e chame-os com super().

Sobrescrita de métodos e super() é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.

Introdução

A substituição de métodos permite que classes filhas personalizem o comportamento herdado. super() permite chamar a implementação original.

Noções básicas de substituição

Defina o mesmo nome de método na classe filha para substituir a versão do pai em todas as instâncias da filha.
class Greeter:
    def greet(self): return 'Hello'
class FormalGreeter(Greeter):
    def greet(self): return 'Good day'
print(FormalGreeter().greet())

super() em substituições

super().greet() dentro da filha chama a versão do pai. Isso é útil para ampliar, e não substituir completamente, o comportamento.
class Logger:
    def log(self, msg): print(f'[LOG] {msg}')
class TimedLogger(Logger):
    def log(self, msg):
        import time
        super().log(f'{time.time():.0f}: {msg}')
TimedLogger().log('test')

super() em __init__

Sempre chame super().__init__() no __init__ da filha para garantir que a inicialização do pai seja executada.
class Animal:
    def __init__(self, name): self.name = name
class Cat(Animal):
    def __init__(self, name, indoor):
        super().__init__(name)
        self.indoor = indoor
cat = Cat('Whiskers', True)
print(cat.name, cat.indoor)

super() com argumentos

super(ChildClass, self) é a forma explícita, no estilo do Python 2. Python 3 permite usar super() sem argumentos na maioria dos casos.
class A:
    def greet(self): return 'A'
class B(A):
    def greet(self): return super().greet() + 'B'
class C(B):
    def greet(self): return super().greet() + 'C'
print(C().greet())

Herança cooperativa

Na herança múltipla, super() segue o MRO. Cada classe que chama super() garante que todas as classes da cadeia sejam inicializadas.
class A:
    def __init__(self): print('A init')
class B(A):
    def __init__(self): super().__init__(); print('B init')
class C(A):
    def __init__(self): super().__init__(); print('C init')
class D(B, C):
    def __init__(self): super().__init__(); print('D init')
D()

Substituindo __str__

Substitua __str__ na classe filha para personalizar como as instâncias são impressas.
class Animal:
    def __init__(self, name): self.name = name
    def __str__(self): return f'Animal: {self.name}'
class Dog(Animal):
    def __str__(self): return f'Dog: {self.name}'
print(Dog('Rex'))

Padrão de método-modelo

O pai define o esqueleto do algoritmo; a filha preenche as etapas substituindo métodos específicos.
class DataProcessor:
    def process(self):
        data = self.load()
        return self.transform(data)
    def load(self): return [1,2,3]
    def transform(self, d): return d
class Doubler(DataProcessor):
    def transform(self, d): return [x*2 for x in d]
print(Doubler().process())

Chamando o método de uma classe irmã

Com super() e um MRO adequado, você pode chamar o método de uma classe irmã na herança múltipla — isso é super() cooperativo.
class A:
    def hello(self): print('A')
class B(A):
    def hello(self): super().hello(); print('B')
class C(A):
    def hello(self): super().hello(); print('C')
class D(B,C):
    def hello(self): super().hello(); print('D')
D().hello()

__init_subclass__

__init_subclass__ é chamado sempre que a classe é herdada. É útil em padrões de registro de extensões.
class Plugin:
    registry = []
    def __init_subclass__(cls, **kw):
        super().__init_subclass__(**kw)
        Plugin.registry.append(cls)
class A(Plugin): pass
class B(Plugin): pass
print([c.__name__ for c in Plugin.registry])

Quando NÃO substituir

Não substitua se não precisar alterar o comportamento. Substituições desnecessárias aumentam o esforço de manutenção. Prefira a composição para comportamentos não relacionados.
# Good: only override what's needed
class Dog(Animal):
    def speak(self): return 'Woof'
    # No need to override __init__ if parent's is fine
print('override guidance')

Verificação rápida

No Python 3, a que super() (sem argumentos) faz referência dentro de um método?

Recapitulação

Substitua redefinindo na classe filha. super().method() chama a versão do pai. super().__init__() inicializa o pai. super() cooperativo segue a ordem do MRO.

Continue

Excelente progresso! Continue avançando para dominar o próximo conceito.

Perguntas Frequentes

A aula “Sobrescrita de métodos e super()” é grátis?

Sim — o texto completo de “Sobrescrita de métodos e super()” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.

O que vou aprender em “Sobrescrita de métodos e super()”?

Sobrescreva métodos da classe pai e chame-os com super(). Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Python Academy?

Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Sobrescrita de métodos e super()”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Python Academy?

Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Herança simples
  2. Sobrescrita de métodos e super()
  3. Herança múltipla e MRO
  4. Polimorfismo e tipagem pato
← Voltar para Python Academy