English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico do Python

Controle de fluxo do Python

Função do Python

Tipos de Dados do Python

Operações de arquivo do Python

Objetos e classes do Python

Data e hora do Python

Conhecimento avançado do Python

Manual de referência do Python

Herança do Python

A herança nos permite definir uma classe que herda todas as funcionalidades da classe pai e nos permite adicionar mais funcionalidades. Neste artigo, você aprenderá a usar herança no Python.

O que é herança?

A herança é uma poderosa funcionalidade da programação orientada a objetos.

Isso se reflete em definir uma novaClasse, e poucas ou nenhuma modificação na classe existente. A nova classe chama-seClasse derivada (ou filha), e a nova classe que herda dela chama-seClasse base (ou pai).

Sintaxe de herança do Python

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

As classes derivadas herdam elementos da classe base e adicionam novos elementos. Isso pode melhorar a reutilização do código.

Exemplo de herança em Python

Para demonstrar o uso de herança, vamos dar um exemplo.

Um polígono é um3Um fecho de grafos com um ou mais lados. Diga, temos uma classe chamada Polygon, definida da seguinte forma.

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]
    def inputSides(self):
        self.sides = [float(input("Entrar os lados "+str(i+1)+" : ")) for i in range(self.n)]
    def dispSides(self):
        for i in range(self.n):
            print("O número de lados",i+1,"é",self.sides[i])

Este objeto tem atributos de dados usados para armazenar o número de lados, o ladoO númeroe o tamanho de cada lado como uma lista, ou sejaO número de lados.

O método inputSides() toma o tamanho de cada lado, e, de forma semelhante, dispSides() as exibe corretamente.

O triângulo é um polígono que tem3um polígono de um número de lados. Portanto, podemos criar uma classe chamada Triangle que herda de Polygon. Isso permite que todas as propriedades disponíveis na classe Polygon sejam usadas facilmente na Triangle. Não precisamos definir-nos novamente (reutilização de código). A Triangle é definida assim.

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)
    def findArea(self):
        a, b, c = self.sides
        # Calcular a metade da circunferência
        s = (a + b + c) / 2
        área = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('A área do triângulo é %0.2f' %area)

Mas, a classe Triangle possui um novo método findArea() para encontrar e imprimir a área do triângulo. Este é um exemplo de execução.

>>> t = Triangle()
>>> t.inputSides()
Entrar os lados 1 : 3
Entrar os lados  2 : 5
Entrar os lados  3 : 4
>>> t.dispSides()
os lados 1 é 3.0
os lados 2 é 5.0
os lados 3 é 4.0
>>> t.findArea()
A área do triângulo é 6.00

Podemos ver que, embora não tenhamos definido métodos como inputSides() ou sides() para a classe Triangle, podemos usá-los.

Se a propriedade não for encontrada na classe, a busca continua até a classe base. Se a classe base for derivada de outra classe, a operação será repetida recursivamente.

Sobrescrita de métodos de métodos no Python

No exemplo acima, note que os métodos __init__() estão definidos nas classes Triangle e Polygon. Quando isso acontece, o método da classe derivada cobre o método da classe base. Isso significa que o __init__() de Triangle tem prioridade sobre o __init__() de Polygon.

Normalmente, quando estamos sobrescrevendo métodos básicos, tendemos a expandir a definição em vez de substituí-la simplesmente. Isso é feito chamando o método da classe base da classe derivada (chamando Polygon.__init__() do __init__() de Triangle).

A escolha melhor é usar a função integrada super(). Portanto, super().__init__(3) é equivalente a Polygon.__init__(self,3) e é a preferência. Você pode aprender mais sobreNo PythonFunção super()Mais informações.

As duas funções integradas isinstance() e issubclass() são usadas para verificar a herança. Se o objeto é uma instância da classe ou de outra classe derivada dela, a função isinstance() retorna True. Cada classe no Python herda da classe base object.

>>> isinstance(t, Triangle)
True
>>> isinstance(t, Polygon)
True
>>> isinstance(t, int)
False
>>> isinstance(t, object)
True

Da mesma forma, issubclass() é usada para verificar a herança.

>>> issubclass(Polygon, Triangle)
False
>>> issubclass(Triangle, Polygon)
True
>>> issubclass(bool, int)
True