O que é polimorfismo em Python? Polimorfismo explicado com exemplos
Publicados: 2021-03-05Índice
Introdução
Python é uma linguagem de programação de alto nível, interpretada e de código aberto. Ele ganhou muito foco entre muitos programadores e desenvolvedores porque suportava bibliotecas que ajudam em muitas tarefas, como análise exploratória de dados, programação de GUI, etc. Além disso, programar em python é muito interessante.
Vamos discutir um recurso interessante do python neste artigo. Então vamos começar!
O que é Polimorfismo?
A palavra polimorfismo é derivada da palavra grega poli (que significa muitos) e morfismo (formas). Isso significa que um único nome de função ou nome de método pode ter várias formas. E isso atende ao desejo de evitar duplicação de código na implementação.
Mas o polimorfismo em python é um pouco diferente do polimorfismo em outras linguagens de programação. Linguagens de programação como java e c++ suportam polimorfismo em tempo de compilação (sobrecarga de método). Na sobrecarga de métodos, vários métodos podem ter o mesmo nome de método, mas diferem em sua assinatura de parâmetro. Este recurso não é suportado pelo python. Se vários métodos tiverem a mesma função, a implementação de função mais recente substituirá a implementação de função anterior.
Polimorfismo de Função
O polimorfismo de função em python pode ser categorizado em dois polimorfismo definido pelo usuário e polimorfismo pré-definido.
Podemos implementar polimorfismo definido pelo usuário para chamar a mesma função com uma assinatura de parâmetro diferente, e isso pode ser considerado uma pequena compensação à indisponibilidade de sobrecarga de métodos em python. Vamos percorrer um código de exemplo
def mul (a,b,c= 1 ): retorna a*b*c; print(mul( 1 , 2 , 3 )) print(mul ( 1,2 ) ) |
No código acima, mesmo que o número de parâmetros passados não seja igual, ambas as instruções de impressão referem-se ao mesmo método. Na segunda chamada de função, o parâmetro c é atribuído com um valor padrão de 1.
Da mesma forma, poucos métodos predefinidos em python exibem recursos de polimorfismo, onde um único método pode aceitar parâmetros de diferentes tipos de dados. Métodos como len() exibem esse recurso. E aqui está o código para ilustrar isso.
print(len([ 1 , 2 , 3 , 4 ])) print(len(( 1 , 2 , 3 , 4 ))) print(len( "python" )) print(len({ “chave1” : “valor1” , “chave2” : “valor2” })) |
No código acima, o mesmo método len() é usado para uma lista, tupla, string e dicionário.
Checkout: Aplicativos Python no mundo real
Sobrecarga do operador
Um operador como '+' pode ser usado de várias maneiras. Por exemplo, ele pode ser usado para adicionar dois números, strings, assim como listas, etc. E aqui está o código para demonstrar isso.
l1=[ 1 , 2 , 3 ] l2=[ 3 , 4 , 5 ] n1= 2 n2= 3 s1= “oi” s2= “lá” imprima(l+l1) imprima(s1+s2) imprima(n1+n2) |
Substituição de método
A substituição de método também é considerada como polimorfismo de tempo de execução e é suportada por muitas linguagens como java, c++ e python.
Esse recurso está relacionado à herança, uma classe filha em python herda funções de membro e variáveis de membro de sua classe pai. E se sentirmos que a implementação do método da classe pai não é relevante, podemos substituir esse método na classe filho. E modificar as funções de membro de acordo com o requisito na classe filha é chamado de substituição de método.
classe two_wheeler : combustível def (auto): print( "o veículo de duas rodas precisa de combustível para funcionar" ) capacidade def (auto): print( “as bicicletas são adequadas para no máximo 2 pessoas” ) class electric_bike (duas rodas): combustível def (auto): print( "bicicletas elétricas funcionam com bateria" ) classe gasolina_bike (duas rodas): combustível def (auto): print( "moto a gasolina funciona com gasolina" ) bicicleta=duas rodas() ebike=electric_bike() pbike=petrol_bike() bicicleta.combustível() bike.capacity() ebike.combustível() ebike.capacity() pbike.combustível() pbike.capacity() |
No código acima, two_wheeler é a classe pai e electric_bike, petrol_bike são as classes filhas. E os métodos fuel(), capacity() são herdados pelas classes filhas electric_bike e petrol_bike. Agora, podemos atualizar a implementação dos métodos se necessário, e dentro da classe electric_bike nós reimplementamos o método fuel(), similarmente reimplementamos o método fuel() na classe petrol_bike.
Por exemplo, no código ebike.fuel() imprime “bicicletas elétricas funcionam com bateria” e pbike.fuel() imprime bicicleta a gasolina funciona com gasolina”.
Polimorfismo em Métodos de Classe
Python permite que classes diferentes tenham o mesmo nome de método, e isso vem sob o recurso de polimorfismo. E a invocação do método é baseada no objeto que usamos para chamar o método.
bicicleta de classe : combustível def (auto): print( "bicicleta não precisa de combustível!" ) capacidade def (auto): print( "bicicletas são adequadas para passeio de uma pessoa" ) classe elétrica_bike : combustível def (auto): print( "bicicletas elétricas funcionam com bateria" ) capacidade def (auto): print( "bicicletas elétricas são adequadas para no máximo 2 pessoas" ) classe gasolina_bike : combustível def (auto): print( "moto a gasolina funciona com gasolina" ) capacidade def (auto): print( “bicicletas a gasolina são adequadas para no máximo 2 pessoas” ) ecobike=bicicleta() ebike=electric_bike() pbike=petrol_bike() l=[ecobike,ebike,pbike] para obj em l: obj.combustível() obj.capacidade() |
No código acima, criamos três objetos das três classes bike, electric_bike e petrol_bike. E todas as três classes têm os mesmos nomes de métodos. Agora, é tarefa do compilador decidir qual método deve ser invocado com base no tipo de objeto usado para invocar o método.
Por exemplo, ecobike.fuel() invocará o método fuel() da classe bike e ebike.fuel() invocará o método fuel() da classe electric_bike. Anexamos todos esses objetos a uma lista e em cada iteração, vamos chamar os mesmos nomes de função, mas o tipo de objeto que invoca o método vai mudar. Na primeira iteração são chamados métodos da classe bike, e métodos de electric_bike, petrol_bike em iterações posteriores.
Leia: Ideias e tópicos do projeto Python
Conclusão
Neste artigo, entendemos o que significa polimorfismo, discutimos como python é diferente no caso de sobrecarga de métodos. Passei por demonstrações de várias possibilidades de polimorfismo em pythons, como sobrecarga de operadores, polimorfismo de função, substituição de método e polimorfismo em métodos de classe.
Agora que você está ciente do polimorfismo em python, implemente seu próximo código python usando todos esses recursos!
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.