Polimorfismo de Python

Polimorfismo de Python

Introdução

O polimorfismo é mais um aspecto importante da programação orientada a objetos. Sem fãs de Warcraft, não tem nada a ver com transformar pessoas em ovelhas. Isso seria muito mais legal. Em vez disso, o polimorfismo permite que métodos e funções usem classes com funcionalidade semelhante da mesma maneira.

O polimorfismo reduz a quantidade de código que você precisa escrever, eliminando a redundância de uma maneira lógica e significativa. Ele depende de você, do programador, de ser inteligente em seu design e aproveitar semelhanças em objetos.

O que é polimorfismo?

O polimorfismo é uma daquelas coisas difíceis de definir em uma única palavra ou frase. O termo assume formas ligeiramente diferentes em diferentes linguagens de programação, tornando um pouco mais difícil de identificar concisa. De um modo geral, e em Python, é a capacidade de vários objetos diferentes derivados de diferentes classes a serem usados ​​da mesma maneira.

Para usar o exemplo de carros com os quais este guia está trabalhando, imagine que você precisa escrever uma função que chama o Siga em frente Método em qualquer tipo de carro que seja passado. Todo objeto criado a partir da classe “carro” original ou qualquer uma das subclasses que o estendem deve ter um Siga em frente método, mesmo que tenha sido substituído para fazer algo um pouco diferente em algumas das subclasses. Isso significa que, através do polimorfismo, você pode escrever uma única função que pega um objeto "carro" e chama Siga em frente. Como todos os objetos instanciados das subclasses de "carro" ainda são tecnicamente objetos de "carro" e têm todas as suas propriedades originais de uma forma ou de outra, isso funcionará.

Observe que a especificação de uma única superclasse a ser usada como tipo de objeto não é totalmente necessária no Python. O python não é totalmente digitado, então você não precisa definir explicitamente quais tipos de variáveis ​​um método ou função leva. Em idiomas como o Java, isso desempenha um papel na forma como o polimorfismo se comporta. No entanto, em Python, é uma boa ideia pensar nesse sentido para garantir que os objetos que você passa terão o método ou a propriedade sendo usada.

Usando -o em Python

Agora, realmente ajudaria tudo isso em ação. Não é tão complexo quanto você provavelmente está pensando agora. Primeiro, verifique se você está configurado com as classes de exemplo. Se você ainda não os possui, eles estão logo abaixo.

Classe Car (objeto): def __init __ (self, make = 'ford', modelo = 'pinto', ano = '1971', milhagem = 253812, color = 'laranja'): self.__make = se faça.__model = modelo.__ ano = ano eu.__mileage = milhagem.__color = cor def set_make (self, make): self.__make = Make def get_make (self): retornar.__make def set_model (self, modelo): self.__model = modelo def get_model (self): retornar.__model def set_year (self, ano): self.__year = ano def Get_Year (self): retornar.__ ano def set_mileage (self, quilometragem): self.__mileage = milhagem def get_mileage (self): return self.__mileage def set_color (self, cor): self.__color = cor def get_color (self): retornar.__color def move_forward (self, speed): print ("seu %s está avançando em %s" %(self.__model, velocidade)) def move_backward (self, speed): print ("movendo -se para trás em % s" % speed) classe Musclecar (carro): def __init __ (self, make = 'ford', model = 'Mustang', ano = ano = ano = ano = '1965', milhagem = 54032, color = 'Blue', hp = 325): super ().__init __ (make, modelo, ano, quilometragem, cor).__hp = hp def set_hp (self, hp): self.__hp = hp def get_hp (self): return self.__hp def drag_race (self, oponente): se (self.__hp> oponente.get_hp ()): retorne "você ganha!"Else: retornar" você perde!"Def Trade_Up (self, ano, cor): super ().set_year (ano) super ().set_color (color) super ().set_mileage (0) 

Com as classes de demonstração configuradas, você pode testar uma função rápida que usa o polimorfismo para chamar Siga em frente.

newmuscleCar = muscclecar () newcar = car () def go_25 (car_object): car_object.move_forward ("25mph") go_25 (newcar) go_25 (newmusclecar) 

Ambas as chamadas de função se comportam exatamente da mesma forma, apesar de terem passado objetos diferentes que foram criados a partir de diferentes classes. Graças ao polimorfismo, você não precisa escrever duas funções diferentes e pode usar as propriedades semelhantes dos objetos para escrever apenas uma função.

Tente substituir um dos Siga em frente Método na classe “Musclecar”. Execute a função novamente e veja o que acontece.

 Classe MuscleCar (carro):… def move_forward (self, speed): print ("seu %sweeted s está rugindo na estrada em %s" %(self.__model, velocidade))… 

Quando a função chama o Siga em frente Método no objeto Muscle Car, ele ainda funciona perfeitamente, e a versão substituída do método é usada.

Pensamentos finais

O polimorfismo parece que seria um conceito terrivelmente complexo, mas seu nome é um pouco de direção. O conceito em si não é tão intimidador e até ajuda a simplificar a estrutura geral do seu código.

Um tema comum na programação orientada a objetos é a eliminação da redundância através do código reutilizável e adaptável. O polimorfismo é uma parte importante dessa imagem.

Exercícios

  1. Use as classes de exemplo para instanciar um objeto "carro" e um objeto "musclecar".
  2. Crie uma função que possa interagir com qualquer tipo de objeto "carro".
  3. Chame sua função duas vezes, passando os dois objetos.
  4. Substituir um dos métodos na aula de musclecar. Certifique -se de não alterar os parâmetros que aceita drasticamente.
  5. Ligue para sua função novamente.
  6. Crie uma nova classe que herda da aula de "carro".
  7. Instanciar um novo objeto da sua classe recém -criada. Passe o objeto para sua função.

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Como construir um aplicativo Tknter usando um objeto orientado…
  • Como escrever extensões de Nautilus com Nautilus-python
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Configurando o ZFS no Ubuntu 20.04
  • Mastering Bash Script Loops
  • Como trabalhar com a API de Rest WooCommerce com Python
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Programador EEPROM CH341A - Leia e escreva dados para chip…