Tipos de herança em Python | Herança do Python [com exemplo]

Publicados: 2021-02-09

Índice

Introdução

A luta por um código limpo é uma batalha travada por todos os programadores. E essa batalha pode ser conquistada com uma armadura adequada de conceitos de programação orientada a objetos. E a utilização adequada dos conceitos de POO nos ajuda a melhorar a reutilização de código, legibilidade, tempo ideal e complexidade de espaço.

Codificar em Python é super divertido. Ele tem um número enorme de suporte a bibliotecas, orientado a objetos, programabilidade de GUI o torna um bolo quente entre todas as linguagens de programação.

A herança é um dos recursos orientados a objetos mais utilizados e implementá-la em python é uma tarefa entusiasmante. Então, vamos começar agora!

Antes de mais nada, vamos entender a definição de herança.

Herança

Herança é um processo de obtenção de propriedades e características (variáveis ​​e métodos) de outra classe. Nesta ordem hierárquica, a classe que herda outra classe é chamada de subclasse ou classe filha, e a outra classe é a classe pai.

A herança é categorizada com base na hierarquia seguida e no número de classes pai e subclasses envolvidas.

Existem cinco tipos de heranças:

  1. Herança única
  2. Herança múltipla
  3. Herança multinível
  4. Herança hierárquica
  5. Herança Híbrida

Herança única

Esse tipo de herança permite que uma subclasse ou classe derivada herde propriedades e características da classe pai, isso evita a duplicação de código e melhora a reutilização do código.

#classe pai
classe Acima :
eu = 5
def fun1 (auto):
print( "Ei, você está na classe pai" )

#subclasse
classe Abaixo (Acima):
i= 10
def fun2 (auto):
print( "Ei, você está na subclasse" )

temp1=Abaixo()
temp2=Acima()
temp1.fun1()
temp1.fun2()
temp2.fun1()
print(temp1.i)
print(temp2.i)
#temp2.fun2()

Tudo bem, vamos percorrer o código acima.

No código acima “Acima” é a classe pai e “Abaixo” é a classe filha que herda a classe pai. Implementar herança em python é uma tarefa simples, basta mencionar o nome da classe pai nos parênteses da classe filha. Estamos criando objetos da classe pai e da classe filha, e aqui vem um ponto interessante sobre a herança. Uma classe filha pode acessar os métodos e variáveis ​​da classe pai, enquanto o contrário não é verdade.

Portanto, no código acima, o objeto temp1 pode acessar os métodos fun1 e fun2, enquanto o objeto temp2 pode acessar apenas o método fun1. Da mesma forma, a mesma regra se aplica a variáveis ​​no código. E acessar um método ou variável de classe filho de um objeto de classe pai gerará um erro. Se a última linha do código não for comentada, isso gera um erro.

Herança múltipla

Essa herança permite que uma classe filha herde de mais de uma classe pai. Esse tipo de herança não é suportado por classes Java, mas python suporta esse tipo de herança. Tem uma enorme vantagem se tivermos o requisito de reunir várias características de diferentes classes.

#classe pai 1
classe A :
demonstração1 = 0
def fun1 (auto):
print(self.demo1)

#classe 2 dos pais
classe B :
demonstração2= 0
def fun2 (auto):
print(self.demo2)

#classe filha
classe C (A, B):
def fun3 (auto):
print( "Ei, você está na classe filha" )

# Código principal
c = C()
c.demo1 = 10
c.demo2 = 5
c.fun3()
print( “o primeiro número é: “ ,c.demo1)
print( “segundo número é: “ ,c.demo2)

No código acima, criamos duas classes pai “A”, “B”. Seguindo a sintaxe da herança em python, criamos uma classe filha, que herda as duas classes “A” e “B”. Como discutido anteriormente que uma classe filha pode acessar os métodos e variáveis ​​da classe pai, a classe filha “C” pode acessar os métodos de sua classe pai.

Herança multinível

Na herança multinível, a transferência das propriedades das características é feita para mais de uma classe hierarquicamente. Para obter uma melhor visualização podemos considerá-lo como uma relação ancestral com netos ou uma raiz com folha em uma árvore com mais de um nível.

#classe pai 1
veículo de classe :
def funcionando (auto):
print( "veículos são usados ​​para transporte" )

#classe infantil 1
carro de classe (veículo):
rodas def (auto):
print( "um carro tem 4 rodas" )

#classe infantil 2
class electric_car (carro):
especialidade def (auto):
print( "carro elétrico funciona com eletricidade" )

elétrico=carro elétrico()
elétrica.especialidade()
electric.wheels()
elétrica.funcionando()

Fazendo uma simulação do código acima, criamos uma classe “vehicle”, então criamos uma classe carro que herda a classe veículo. Agora, o “veículo” é uma classe pai e o “carro” é uma classe filha. Mais tarde, criamos uma classe “electric_car”, agora a classe car é uma classe pai e a classe electric_car é uma classe filha, e o relacionamento entre a classe de veículo e a classe de carro elétrico é a herança multinível.

Aqui a classe electric_car pode acessar os métodos, variáveis ​​tanto da classe do veículo quanto da classe do carro, enquanto a classe do carro pode acessar apenas os métodos, variáveis ​​da classe do veículo. E como discutido, o veículo da classe pai não pode acessar nenhum método da classe filha.

Herança hierárquica

Essa herança permite que uma classe hospede como uma classe pai para mais de uma classe ou subclasse filha. Isso oferece o benefício de compartilhar o funcionamento dos métodos com várias classes filhas, evitando a duplicação de código.

#classe pai
classe Pai :
def fun1 (auto):
print( "Ei, você está na classe pai" )

#classe infantil 1
classe filho1 (pai):
def fun2 (auto):
print( "Ei, você está na classe infantil 1" )

#classe infantil 2
classe child2 (pai):
def fun3 (auto):
print( "Ei, você está na classe infantil 2" )

#classe infantil 3
criança da classe3 ( pai):
def fun4 (auto):
print( "Ei, você está na classe infantil 3" )

# programa principal
filho_obj1 = filho3()
filho_obj2 = filho2()
filho_obj3 = filho1()
child_obj1.fun1()
child_obj1.fun4()
child_obj2.fun1()
child_obj2.fun3()
child_obj3.fun1()
child_obj3.fun2()

No código acima, temos uma única classe pai e várias classes filhas herdando a mesma classe pai. Agora todas as classes filhas podem acessar os métodos e variáveis ​​da classe pai. Criamos uma classe “Parent” e 3 classes filhas “child1”, “child2”, “child3”, que herda a mesma classe pai “Parent”.

Checkout: Ideias de projetos de código aberto Python

Herança Híbrida

Uma herança é dita herança híbrida se mais de um tipo de herança for implementado no mesmo código. Esse recurso permite que o usuário utilize o recurso de herança da melhor maneira possível. Isso satisfaz o requisito de implementação de um código que precisa de várias heranças na implementação.

classe A:
def fun1(auto):
print(“Ei, você está na classe A”) class B(A):
def fun2(auto):
print("Ei, você está na classe B")class C(A):
def fun3(self):
print(“Ei, você está na classe C”) class D(C,A): #line 13
def fun4(self):
print("Ei, você está na classe D")#programa principal
ref = D()
ref.fun4()
ref.fun3()
ref.fun1()

No código acima, podemos ver que implementamos mais de um tipo de herança. As classes A, B, C implementam herança hierárquica e as classes A, C, D implementam herança multinível. No entanto, essas heranças individuais têm suas propriedades individuais de acessar métodos e variáveis ​​da classe pai. Além disso, há um ponto a ser observado.

Quando estamos implementando herança multinível, seguimos uma sintaxe como “class_filho(classe_pai1, classe_pai2)”. Mas esta sintaxe lançará um erro se “parent_class1” estiver hierarquicamente acima de “parent_class2”. Se quisermos implementar esta sintaxe, então o “parent_class1” deve estar em um nível hierarquicamente inferior ao “parent_class2”. Por exemplo, no código acima, se a linha 13 tiver uma classe de sintaxe D(A, C), o código não funcionará, pois a classe C é hierarquicamente inferior à classe A.

Aprenda cursos de ciência de dados das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Leia: Ideias e tópicos do projeto Python

Conclusão

Examinamos os usos e necessidades da herança e entendemos a definição de herança. Além disso, passamos pelos tipos de herança e pelos códigos de implementação e explicações de cada tipo de herança. Compreendeu as regras de variáveis ​​e métodos de acesso em diferentes tipos de heranças.

Agora que você conhece os diferentes tipos de heranças em python, tente implementá-las e tente utilizá-las em seu código. Tente otimizar seu código com a utilização adequada da herança.

Se você está curioso para aprender sobre ciência de dados, confira o PG Diploma in Data Science do IIIT-B & upGrad, que é criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com especialistas do setor, 1- on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.

Qual é a diferença entre herança múltipla e herança multinível?

Muitos programadores iniciantes muitas vezes se confundem entre herança múltipla e herança multinível. O seguinte ilustra algumas das diferenças significativas entre esses dois tipos de herança.
Herança múltipla -
1. Quando uma classe filha herda suas propriedades e características de mais de uma classe base, esse tipo de herança é conhecido como Herança Múltipla.
2. Não é amplamente utilizado, pois a Herança Múltipla pode ser bastante complexa de entender.
3. Possui apenas dois níveis de classe: classe base e classe derivada.
Herança multinível
1. A herança na qual uma classe filha herda as propriedades de sua classe base que está herdando ainda mais as propriedades de outra classe base, tornando a primeira uma classe filha é conhecida como Herança Multinível.
2. Essa herança serve a grandes propósitos e, portanto, é amplamente usada.
3. Possui pelo menos três níveis de classe: classe base, classe intermediária e classe derivada.

O que você entende sobre herança híbrida?

A herança híbrida é um tipo único de herança. Ao invés de ter um novo conceito, como o próprio nome sugere, é uma combinação de dois ou mais tipos de heranças. Por exemplo, uma classe que mostra heranças múltiplas e multiníveis é um exemplo de herança híbrida.

O que você sabe sobre modificadores de acesso em Python?

Em Python, existem 3 tipos de modificadores de acesso que são mencionados abaixo:
1. Modificador de acesso público - Os membros públicos de uma classe são acessíveis por qualquer parte do programa. Em Python, se o especificador de acesso de membros de dados ou funções de membro não for especificado, ele será público por padrão.
2. Modificador de Acesso Protegido - Se um membro de dados ou uma função de membro for definida como protegida, então só será acessível pelas classes derivadas dessa classe.
3. Modificador de acesso privado - O modificador de acesso privado é o especificador de acesso mais seguro. Os membros privados só são acessíveis dentro da classe em que estão definidos.