Polimorfismo em Python (com exemplos)

Neste tutorial, aprenderemos sobre polimorfismo, diferentes tipos de polimorfismo e como podemos implementá-los em Python com a ajuda de exemplos.

O que é polimorfismo?

O significado literal de polimorfismo é a condição de ocorrência em diferentes formas.

O polimorfismo é um conceito muito importante em programação. Refere-se ao uso de uma entidade de tipo único (método, operador ou objeto) para representar diferentes tipos em diferentes cenários.

Vamos dar um exemplo:

Exemplo 1: Polimorfismo além do operador

Sabemos que o +operador é amplamente usado em programas Python. Porém, não possui um único uso.

Para tipos de dados inteiros, o +operador é usado para realizar a operação de adição aritmética.

 num1 = 1 num2 = 2 print(num1+num2) 

Conseqüentemente, o programa acima gera 3.

Da mesma forma, para tipos de dados de string, o +operador é usado para realizar a concatenação.

 str1 = "Python" str2 = "Programming" print(str1+" "+str2) 

Como resultado, o programa acima gera a Programação Python.

Aqui, podemos ver que um único operador +foi usado para realizar diferentes operações para tipos de dados distintos. Esta é uma das ocorrências mais simples de polimorfismo em Python.

Polimorfismo de função em Python

Existem algumas funções em Python que são compatíveis para serem executadas com vários tipos de dados.

Uma dessas funções é a len()função. Ele pode ser executado com muitos tipos de dados em Python. Vejamos alguns exemplos de casos de uso da função.

Exemplo 2: função len () polimórfica

 print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal"))) 

Resultado

 9 3 2 

Aqui, podemos ver que muitos tipos de dados como string, lista, tupla, conjunto e dicionário podem funcionar com a len()função. No entanto, podemos ver que ele retorna informações específicas sobre tipos de dados específicos.

Polimorfismo na função len () em Python

Polimorfismo de classe em Python

O polimorfismo é um conceito muito importante na Programação Orientada a Objetos.

Para saber mais sobre OOP em Python, visite: Python Object-Oriented Programming

Podemos usar o conceito de polimorfismo ao criar métodos de classe, pois o Python permite que diferentes classes tenham métodos com o mesmo nome.

Podemos então generalizar a chamada desses métodos, desconsiderando o objeto com o qual estamos trabalhando. Vejamos um exemplo:

Exemplo 3: Polimorfismo em Métodos de Classe

 class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a cat. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a dog. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound() 

Resultado

Meow, eu sou um gato. Meu nome é Kitty. Eu tenho 2,5 anos. Miau Bark Eu sou um cachorro. Meu nome é Fluffy. Eu tenho 4 anos Latido

Aqui, criamos duas classes Cate Dog. Eles compartilham uma estrutura semelhante e têm os mesmos nomes de método info()e make_sound().

No entanto, observe que não criamos uma superclasse comum ou vinculamos as classes de forma alguma. Mesmo assim, podemos empacotar esses dois objetos diferentes em uma tupla e iterar por meio dela usando uma variável animal comum. É possível devido ao polimorfismo.

Polimorfismo e herança

Como em outras linguagens de programação, as classes filhas em Python também herdam métodos e atributos da classe pai. Podemos redefinir certos métodos e atributos especificamente para se adequar à classe filha, que é conhecida como Substituição de Método .

O polimorfismo nos permite acessar esses métodos e atributos substituídos que têm o mesmo nome da classe pai.

Vejamos um exemplo:

Exemplo 4: Substituição de Método

 from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "I am a two-dimensional shape." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "Squares have each angle equal to 90 degrees." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area()) 

Resultado

Círculo Eu sou uma forma bidimensional. Os quadrados têm cada ângulo igual a 90 graus. 153,93804002589985

Aqui, podemos ver que os métodos como __str__(), que não foram substituídos nas classes filhas, são usados ​​na classe pai.

Devido ao polimorfismo, o interpretador Python reconhece automaticamente que o fact()método do objeto a(classe Square) é sobrescrito. Então, ele usa aquele definido na classe filha.

Por outro lado, como o fact()método para o objeto b não é sobrescrito, ele é usado da classe Parent Shape.

Polimorfismo em classes pai e filho em Python

Observação : a sobrecarga de método , uma maneira de criar vários métodos com o mesmo nome, mas com argumentos diferentes, não é possível em Python.

Artigos interessantes...