Conteúdo do Curso
Programação Orientada a Objetos em Python Avançado
Programação Orientada a Objetos em Python Avançado
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):
class User: role = "User" class Staff(User): pass print(Staff.role)
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:
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
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.
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
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".
Obrigado pelo seu feedback!