Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Dominando Herança em Python: Conceitos, Sintaxe e Exemplos Práticos

Herança em Python

Herança permite criar nova classe que herda toda funcionalidade de classe pai enquanto adiciona ou estende recursos. Este tutorial explica como usar herança em Python, com exemplos claros e orientação de boas práticas.

Vídeo: Herança em Python

Herança em Python

Herança é princípio central de programação orientada a objetos que promove reuso de código e hierarquia lógica. Nova classe (a derivada ou filha) é definida com mudanças mínimas ou nenhuma em classe existente (a base ou pai). Classe filha recebe automaticamente atributos e métodos do pai, que podem ser sobrescritos ou estendidos conforme necessário.


Sintaxe de Herança em Python

class BaseClass:
    # corpo da classe base
class DerivedClass(BaseClass):
    # corpo da classe derivada

No snippet acima, DerivedClass herda todos membros públicos de BaseClass. Adicionando novos métodos ou sobrescrevendo existentes, classe derivada pode customizar comportamento enquanto reusa implementação base.


Exemplo de Herança em Python

Vamos ilustrar herança com exemplo prático. Suponha que temos classe genérica Polygon que armazena número de lados e seus comprimentos:

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for _ in range(no_of_sides)]
    def input_sides(self):
        self.sides = [float(input(f"Enter side {i+1} : ")) for i in range(self.n)]
    def display_sides(self):
        for i, side in enumerate(self.sides, 1):
            print(f"Side {i} is {side}")

Classe Polygon encapsula atributos e métodos comuns para qualquer polígono. Um Triangle é polígono específico com exatamente três lados, então pode herdar de Polygon sem redefinir lógica compartilhada:

class Triangle(Polygon):
    def __init__(self):
        super().__init__(3)  # inicializa base com 3 lados
    def find_area(self):
        a, b, c = self.sides
        s = (a + b + c) / 2
        area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
        print(f"The area of the triangle is {area:.2f}")

Executar o seguinte demonstra herança em ação:

>>> t = Triangle()
>>> t.input_sides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.display_sides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.find_area()
The area of the triangle is 6.00

Note que Triangle pode chamar input_sides() e display_sides() mesmo sem defini-las — herança torna esses métodos disponíveis automaticamente.

Se atributo ou método não encontrado na classe filha, Python busca na classe pai, e essa busca continua pela cadeia de herança se necessário.


Sobrescrita de Método em Python

Tanto Polygon quanto Triangle definem método __init__. Implementação da filha sobrescreve a do pai, mas pode (e deve) estender lógica base invocando-a explicitamente. Usar super() é abordagem moderna preferida:

class Triangle(Polygon):
    def __init__(self):
        super().__init__(3)  # chama Polygon.__init__

Ao sobrescrever, método filho pode adicionar novo comportamento ou modificar comportamento base preservando funcionalidade original.

Python fornece isinstance() e issubclass() para introspectar relações de herança:

t = Triangle()
print(isinstance(t, Triangle))  # True
print(isinstance(t, Polygon))   # True
print(isinstance(t, int))       # False
print(isinstance(t, object))    # True
print(issubclass(Polygon, Triangle))  # False
print(issubclass(Triangle, Polygon))  # True
print(issubclass(bool, int))          # True

Esses utilitários são essenciais para type checking e garantir que objetos conformam interfaces esperadas.

Para mais sobre super(), veja documentação Python super() function.

python

  1. Dominando Tipos de Dados em Python: Guia Prático
  2. Dominando Operadores em Python: Guia Completo
  3. Dominando a Declaração Pass em Python: Guia Prático
  4. Dominando Dicionários em Python: Criação, Manipulação e Técnicas Avançadas
  5. Dominando Exceções Customizadas em Python: Guia Prático
  6. Dominando Programação Orientada a Objetos em Python: Classes, Herança, Encapsulamento e Polimorfismo
  7. Dominando Sobrecarga de Operadores em Python: Guia Prático
  8. Dominando Decorator @property do Python: Getters & Setters Limpos e Compatíveis
  9. Entendendo type() e isinstance() em Python: Exemplos Práticos
  10. Dominando Herança em C#: Construa Código Reutilizável e Manutenível