Polimorfismo em Python com EXEMPLOS

โšก Resumo Inteligente

Polimorfismo em Python Permite que uma รบnica interface funcione com objetos de diferentes tipos, de modo que o mesmo mรฉtodo ou operador se comporte de maneira diferente dependendo do objeto. Isso se manifesta por meio de sobrecarga de operadores, funรงรตes internas, mรฉtodos definidos pelo usuรกrio e heranรงa. Python programas.

  • ๐Ÿ”˜ Definiรงรฃo: Polimorfismo significa "muitas formas", permitindo que uma รบnica interface atue em diferentes tipos ou classes de dados.
  • โ˜‘๏ธ OperaSobrecarga do Tor: O operador + soma nรบmeros, mas tambรฉm concatena strings, demonstrando o polimorfismo de operadores.
  • โœ… Funรงรตes incorporadas: Funรงรตes como len() funcionam tanto em strings quanto em listas e dicionรกrios.
  • ๐Ÿงช Mรฉtodos definidos pelo usuรกrio: Classes podem compartilhar nomes de mรฉtodos como area() e perimeter() para diferentes formas.
  • ๐Ÿ› ๏ธ Heranรงa: A sobrescrita de mรฉtodos permite que uma classe filha redefina um mรฉtodo da classe pai em tempo de execuรงรฃo.
  • ๐Ÿค– Relevรขncia da IA: Bibliotecas de aprendizado de mรกquina reutilizam interfaces compartilhadas, como fit() e forward(), em diversos modelos.

Polimorfismo em Python

O que รฉ polimorfismo?

O polimorfismo pode ser definido como uma condiรงรฃo que ocorre de muitas formas diferentes. ร‰ um conceito em Python programaรงรฃo em que um objeto definido em Python pode ser usado de diferentes maneiras. Ele permite ao programador definir vรกrios mรฉtodos em uma classe derivada e tem o mesmo nome presente na classe pai. Tais cenรกrios suportam sobrecarga de mรฉtodo em Python.

Polimorfismo em Operatoros

Um operador em Python ajuda a executar tarefas matemรกticas e vรกrias outras tarefas de programaรงรฃo. Por exemplo, o operador '+' ajuda a executar a adiรงรฃo entre dois tipos inteiros em Python, e da mesma forma, o mesmo operador auxilia na concatenaรงรฃo de strings em Python programaรงรฃo.

Tomemos um exemplo de + (mais) Operador em Python para exibir uma aplicaรงรฃo de polimorfismo em Python como mostrado abaixo:

Python Code:

p = 55
q = 77
r = 9.5
g1 = "Guru"
g2 = "99!"
print("the sum of two numbers",p + q)
print("the data type of result is",type(p + q))
print("The sum of two numbers",q + r)
print("the data type of result is", type (q + r))
print("The concatenated string is", g1 + g2)
print("The data type of two strings",type(g1 + g2))

Saรญda:

the sum of two numbers 132
the data type of result is <class 'int'>

The sum of the two numbers 86.5
the data type of result is <class 'float'>

The concatenated string is Guru99!
The data type of two strings <class 'str'>

O exemplo acima tambรฉm pode ser considerado como um exemplo de sobrecarga do operador.

Polimorfismo em mรฉtodos definidos pelo usuรกrio

Um mรฉtodo definido pelo usuรกrio no Python linguagem de programaรงรฃo sรฃo mรฉtodos que o usuรกrio cria e sรฃo declarados usando a palavra-chave def com o nome da funรงรฃo.

Polimorfismo no Python a linguagem de programaรงรฃo รฉ obtida por meio de sobrecarga e substituiรงรฃo de mรฉtodos. Python define mรฉtodos com palavra-chave def e com o mesmo nome nas classes filha e pai.

Tomemos o seguinte exemplo conforme mostrado abaixo: -

Python Code:

from math
import pi
class square:
    def __init__(self, length):
    self.l = length
def perimeter(self):
    return 4 * (self.l)
def area(self):
    return self.l * self.l
class Circle:
    def __init__(self, radius):
    self.r = radius
def perimeter(self):
    return 2 * pi * self.r
def area(self):
    return pi * self.r * * 2
# Initialize the classes
sqr = square(10)
c1 = Circle(4)
print("Perimeter computed for square: ", sqr.perimeter())
print("Area computed for square: ", sqr.area())
print("Perimeter computed for Circle: ", c1.perimeter())
print("Area computed for Circle: ", c1.area())

Saรญda:

Perimeter computed for square:  40
Area computed for square:  100
Perimeter computed for Circle:  25.132741228718345
Area computed for Circle:  50.26548245743669

No cรณdigo acima, existem dois mรฉtodos definidos pelo usuรกrio, perรญmetro e รกrea, definidos nas classes cรญrculo e quadrado.

Conforme mostrado acima, tanto a classe cรญrculo quanto a classe quadrada invocam o mesmo nome de mรฉtodo exibindo a caracterรญstica do Polimorfismo para entregar a saรญda necessรกria.

Polimorfismo em Funรงรตes

As funรงรตes integradas em Python sรฃo projetados e compatรญveis para executar vรกrios tipos de dados. Em Python, len() รฉ uma das principais funรงรตes integradas.

Ela funciona com diversos tipos de dados: lista, tupla, string e dicionรกrio. A funรงรฃo len() retorna informaรงรตes definidas de acordo com esses vรกrios tipos de dados.

A figura a seguir mostra como o polimorfismo pode ser aplicado em Python em relaรงรฃo ร s funรงรตes integradas: โ€“

Polimorfismo em Funรงรตes

O programa a seguir ajuda a ilustrar a aplicaรงรฃo do polimorfismo em Python: -

Python Code:

print ("The length of string Guru99 is ",len("Guru99"))
print("The length of list is ",len(["Guru99","Example","Reader"]))
print("The length of dictionary is ",len({"Website name":"Guru99","Type":"Education"}))

Saรญda:

The length of string Guru99 is 6
The length of the list is 3
The length of the dictionary is 2

Polimorfismo em Funรงรตes

No exemplo acima, a funรงรฃo len() de Python executa polimorfismo para tipos de dados string, lista e dicionรกrio, respectivamente.

Polimorfismo e Heranรงa

Heranรงa em Python pode ser definido como o conceito de programaรงรฃo em que uma classe filha definida herda propriedades de outra classe base presente em Python.

Existem duas chaves Python conceitos denominados substituiรงรฃo de mรฉtodo e sobrecarga de mรฉtodo.

  • Na sobrecarga de mรฉtodo, Python fornece o recurso de criaรงรฃo de mรฉtodos que possuem o mesmo nome para realizar ou executar diferentes funcionalidades em um determinado trecho de cรณdigo. Permite sobrecarregar mรฉtodos e utilizรก-los para realizar diferentes tarefas em termos mais simples.
  • Na substituiรงรฃo de mรฉtodo, Python substitui o valor que compartilha um nome semelhante nas classes pai e filho.

Tomemos o seguinte exemplo de polimorfismo e heranรงa conforme mostrado abaixo: โ€“

Python Code:

class baseclass:
    def __init__(self, name):
    self.name = name
def area1(self):
    pass
def __str__(self):
    return self.name
class rectangle(baseclass):
    def __init__(self, length, breadth):
    super().__init__("rectangle")
self.length = length
self.breadth = breadth
def area1(self):
    return self.length * self.breadth
class triangle(baseclass):
    def __init__(self, height, base):
    super().__init__("triangle")
self.height = height
self.base = base
def area1(self):
    return (self.base * self.height) / 2
a = rectangle(90, 80)
b = triangle(77, 64)
print("The shape is: ", b)
print("The area of shape is", b.area1())
print("The shape is:", a)
print("The area of shape is", a.area1())

Saรญda:

The shape is: a triangle
The area of a shape is 2464.0

The shape is: a rectangle
The area of a shape is 7200

No cรณdigo acima, os mรฉtodos tรชm o mesmo nome definido como mรฉtodo init e mรฉtodo area1. Os objetos da classe quadrado e retรขngulo sรฃo entรฃo usados โ€‹โ€‹para invocar os dois mรฉtodos para executar tarefas diferentes e fornecer a saรญda da รกrea do quadrado e do retรขngulo.

Polimorfismo com os mรฉtodos de classe

O Python a programaรงรฃo permite que os programadores alcancem polimorfismo e sobrecarga de mรฉtodos com mรฉtodos de classe. As diferentes classes em Python pode ter mรฉtodos que sรฃo declarados com o mesmo nome em todo o Python cรณdigo.

In Python, duas classes diferentes podem ser definidas. Uma seria a classe filha e deriva atributos de outra classe definida denominada classe pai.

O exemplo a seguir ilustra o conceito de Polimorfismo com mรฉtodos de classe: โ€“

Python Code:

class amazon:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print("This is product and am class is invoked. The name is {self.name}. This costs {self.price} rupees.")
class flipkart:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print(f "This is product and fli class is invoked. The name is {self.name}. This costs {self.price} rupees.")
FLP = flipkart("Iphone", 2.5)
AMZ = amazon("Iphone", 4)
for product1 in (FLP, AMZ):
    product1.info()

Saรญda:

This is a product, and fli class is invoked. The name is iPhone, and this costs 2.5 rupees.
This is a product, and am class is invoked. The name is iPhone, and this costs 4 rupees.

No cรณdigo acima, duas classes diferentes chamadas flipkart e amazon usam os mesmos nomes de mรฉtodo info e init para fornecer respectivas cotaรงรตes de preรงos do produto e ilustrar melhor o conceito de polimorfismo em Python.

Diferenรงa entre sobrecarga de mรฉtodo e polimorfismo em tempo de compilaรงรฃo

No polimorfismo em tempo de compilaรงรฃo, o compilador do Python programa resolve a chamada. O polimorfismo em tempo de compilaรงรฃo รฉ realizado por meio da sobrecarga de mรฉtodos.

O Python o compilador nรฃo resolve as chamadas durante o tempo de execuรงรฃo para polimorfismo. Tambรฉm รฉ classificado como substituiรงรฃo de mรฉtodo, em que os mesmos mรฉtodos carregam assinaturas ou propriedades semelhantes, mas fazem parte de classes diferentes.

Perguntas Frequentes

Pato typing Letรฃo Python Avalie um objeto pelos mรฉtodos que ele oferece, e nรฃo pelo seu tipo de classe. Se um objeto possui o mรฉtodo necessรกrio, ele funciona, seguindo a ideia de que "se anda como um pato e grasna como um pato, รฉ um pato".

Tradicionalmente nรฃo. Quando dois mรฉtodos compartilham o mesmo nome, a รบltima definiรงรฃo prevalece. Python Em vez disso, simula a sobrecarga usando argumentos padrรฃo, argumentos de comprimento variรกvel (*args) ou o decorador functools.singledispatch para lidar com diferentes tipos de argumentos dentro de uma รบnica funรงรฃo.

AbstracAs classes base, do mรณdulo abc, declaram mรฉtodos que todas as subclasses devem implementar. Elas impรตem uma interface compartilhada, de modo que subclasses nรฃo relacionadas podem ser usadas polimorficamente. Python garante que cada um forneรงa os mรฉtodos necessรกrios.

O polimorfismo melhora a reutilizaรงรฃo, a flexibilidade e a escalabilidade do cรณdigo. Uma รบnica funรงรฃo ou interface pode processar diversos tipos de objetos, o que reduz a duplicaรงรฃo, simplifica a manutenรงรฃo e permite adicionar novas classes sem reescrever o cรณdigo que jรก as utiliza.

Sim. Atravรฉs do pato typingClasses nรฃo relacionadas que implementam o mesmo mรฉtodo podem ser usadas de forma intercambiรกvel, sem qualquer classe pai em comum. OperaA sobrecarga de funรงรตes e funรงรตes integradas como len() tambรฉm fornecem polimorfismo sem heranรงa.

O polimorfismo surge quando uma funรงรฃo processa strings, listas ou objetos personalizados, em drivers de banco de dados que expรตem uma รบnica API em diferentes mecanismos e em kits de ferramentas de GUI onde muitos widgets compartilham mรฉtodos draw() ou update() chamados por meio de uma รบnica interface.

As estruturas de IA dependem do polimorfismo. Em PyTorEm ch, cada modelo herda de nn.Module e sobrescreve o mรฉtodo forward(); no scikit-learn, os estimadores compartilham os mรฉtodos fit() e predict(), de modo que diferentes algoritmos sรฃo executados por meio de uma interface consistente e intercambiรกvel.

Sim. O GitHub Copilot e assistentes de IA com agentes geram funรงรตes tipadas dinamicamente e sugerem abs.tract classes base e refatorar mรฉtodos repetidos em designs polimรณrficos a partir de um breve estรญmulo. RevVeja a saรญda para confirmar se a lรณgica e as interfaces estรฃo corretas.

Resuma esta postagem com: