Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
O que é Herança? | Herança
Programação Orientada a Objetos em Python Avançado
course content

Conteúdo do Curso

Programação Orientada a Objetos em Python Avançado

Programação Orientada a Objetos em Python Avançado

1. Conceitos de POO
2. Herança
3. Encapsulamento
4. Polimorfismo e Abstração
5. Métodos Mágicos

book
O que é Herança?

No Python, a herança é um dos conceitos fundamentais da programação orientada a objetos (POO). Refere-se à capacidade de uma subclasse de herdar propriedades e comportamentos (ou seja, métodos e atributos) de uma classe pai. A herança permite a reutilização de código e ajuda a criar uma estrutura hierárquica de classes, onde subclasses podem especializar ou estender a funcionalidade de suas classes pai.

Para herdar uma subclasse de outra classe, você pode escrever seu nome entre parênteses () após o nome da subclasse (sem espaço):

1234567
class User: role = "User" class Staff(User): pass print(Staff.role)
copy

Este código demonstra que as classes filhas podem acessar atributos de suas classes pais, permitindo que os utilizem ou os substituam conforme necessário.

Nota

O interpretador busca os atributos da Child até o último Parent em ordem.

Observe o exemplo de código:

123456789101112131415161718
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
copy

O código então acessa o atributo role da instância bob usando bob.role. Como o atributo role não está definido na classe Staff nem na instância bob, ele recorre ao atributo role da classe User, e "User" é impresso.

Em resumo, este código demonstra como os atributos de uma classe podem ser herdados e acessados por instâncias, assim como os atributos de instância são únicos para cada instância.

123456789101112131415161718
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
copy

Da mesma forma, quando print(bob.role) é chamado, ele acessa o atributo role da classe Staff, que sobrescreveu o atributo role da classe User. Como resultado, será exibido "Staff".

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 1
We're sorry to hear that something went wrong. What happened?
some-alt