Polimorfismo en Python con EJEMPLOS

⚡ Resumen inteligente

Polimorfismo en Python Permite que una única interfaz funcione con objetos de diferentes tipos, por lo que el mismo método u operador se comporta de manera diferente según el objeto. Esto se manifiesta a través de la sobrecarga de operadores, funciones integradas, métodos definidos por el usuario y herencia. Python

  • 🔘 Definición: El polimorfismo significa “muchas formas”, lo que permite que una misma interfaz actúe sobre diferentes tipos o clases de datos.
  • ☑️ Operasobrecarga de Tor: El operador + suma números pero concatena cadenas, lo que demuestra el polimorfismo de operadores.
  • ✅ Funciones integradas: Funciones como len() funcionan por igual con cadenas de texto, listas y diccionarios.
  • 🧪 Métodos definidos por el usuario: Las clases pueden compartir nombres de métodos como area() y perimeter() para diferentes formas.
  • 🛠️ Herencia: La sobreescritura de métodos permite que una clase hija redefina un método de la clase padre en tiempo de ejecución.
  • 🤖 Relevancia de la IA: Las bibliotecas de aprendizaje automático reutilizan interfaces compartidas, como fit() y forward(), en diferentes modelos.

Polimorfismo en Python

¿Qué es el polimorfismo?

El polimorfismo se puede definir como una condición que se presenta de muchas formas diferentes. Es un concepto en Python programación en la que un objeto definido en Python se puede utilizar de diferentes maneras. Permite al programador definir múltiples métodos en una clase derivada y tiene el mismo nombre que el presente en la clase principal. Estos escenarios admiten la sobrecarga de métodos en Python.

Polimorfismo en Operatoros

Un operador en Python Ayuda a realizar tareas matemáticas y otras tareas de programación. Por ejemplo, el operador '+' ayuda a realizar sumas entre dos tipos de números enteros en Python, y de la misma manera, el mismo operador ayuda a concatenar cadenas en Python programación.

Tomemos un ejemplo de + (más) operador en Python para mostrar una aplicación de polimorfismo en Python como se muestra a continuación:

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))

Salida:

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'>

El ejemplo anterior también puede considerarse como un ejemplo de sobrecarga del operador.

Polimorfismo en métodos definidos por el usuario.

Un método definido por el usuario en el Python El lenguaje de programación son métodos que crea el usuario y se declara utilizando la palabra clave def con el nombre de la función.

Polimorfismo en el Python El lenguaje de programación se logra mediante la sobrecarga y anulación de métodos. Python define métodos con la palabra clave def y con el mismo nombre tanto en la clase secundaria como en la primaria.

Tomemos el siguiente ejemplo que se muestra a continuación:

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())

Salida:

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

En el código anterior, hay dos métodos definidos por el usuario, perímetro y área, definidos en clases de círculo y cuadrado.

Como se muestra arriba, tanto la clase circular como la clase cuadrada invocan el mismo nombre de método que muestra la característica de polimorfismo para entregar el resultado requerido.

Polimorfismo en funciones

Las funciones integradas en Python están diseñados y hechos compatibles para ejecutar varios tipos de datos. En Python, len() es una de las funciones integradas clave.

Funciona con varios tipos de datos: listas, tuplas, cadenas y diccionarios. La función len() devuelve información específica para cada uno de estos tipos de datos.

La siguiente figura muestra cómo se puede aplicar el polimorfismo en Python en relación con las funciones integradas: –

Polimorfismo en funciones

El siguiente programa ayuda a ilustrar la aplicación del polimorfismo en 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"}))

Salida:

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

Polimorfismo en funciones

En el ejemplo anterior, la función len() de Python realiza polimorfismo para tipos de datos de cadena, lista y diccionario, respectivamente.

Polimorfismo y herencia

herencia en Python se puede definir como el concepto de programación en el que una clase secundaria definida hereda propiedades de otra clase base presente en Python.

Hay dos claves Python conceptos denominados anulación de método y sobrecarga de método.

  • En la sobrecarga de métodos, Python proporciona la característica de crear métodos que tienen el mismo nombre para realizar o ejecutar diferentes funcionalidades en un fragmento de código determinado. Permite sobrecargar métodos y los utiliza para realizar diferentes tareas en términos más simples.
  • En método anulado, Python anula el valor que comparte un nombre similar en las clases padre e hija.

Tomemos el siguiente ejemplo de polimorfismo y herencia como se muestra a continuación:

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())

Salida:

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

En el código anterior, los métodos tienen el mismo nombre definido como método init y método area1. Los objetos de clase cuadrado y rectángulo se utilizan luego para invocar los dos métodos para realizar diferentes tareas y proporcionar la salida del área del cuadrado y el rectángulo.

Polimorfismo con los métodos de clase

El Python La programación permite a los programadores lograr polimorfismo y sobrecarga de métodos con métodos de clase. Las diferentes clases en Python puede tener métodos que se declaran con el mismo nombre en todo el Python código.

In Python, se pueden definir dos clases diferentes. Una sería la clase secundaria y deriva atributos de otra clase definida denominada clase principal.

El siguiente ejemplo ilustra el concepto de polimorfismo con métodos de clase: –

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()

Salida:

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.

En el código anterior, dos clases diferentes denominadas flipkart y amazon usan los mismos nombres de método info e init para proporcionar cotizaciones de precios respectivas del producto e ilustrar aún más el concepto de polimorfismo en Python.

Diferencia entre sobrecarga de métodos y polimorfismo en tiempo de compilación

En el polimorfismo en tiempo de compilación, el compilador del Python El programa resuelve la llamada. El polimorfismo en tiempo de compilación se logra mediante la sobrecarga de métodos.

El Python El compilador no resuelve las llamadas durante el tiempo de ejecución por polimorfismo. También se clasifica como anulación de métodos, en la que los mismos métodos llevan firmas o propiedades similares, pero forman parte de clases diferentes.

Preguntas Frecuentes

Pato typing deja Python Un objeto se juzga por los métodos que proporciona, no por su tipo de clase. Si un objeto tiene el método requerido, funciona, siguiendo la idea de que "si camina como un pato y grazna como un pato, es un pato".

No de forma tradicional. Cuando dos métodos comparten nombre, prevalece la última definición. Python En su lugar, simula la sobrecarga utilizando argumentos predeterminados, argumentos *args de longitud variable o el decorador functools.singledispatch para manejar diferentes tipos de argumentos dentro de una sola función.

AbstracLas clases base t, del módulo abc, declaran métodos que cada subclase debe implementar. Refuerzan una interfaz compartida, de modo que las subclases no relacionadas se pueden usar de forma polimórfica, mientras que Python garantiza que cada una proporcione los métodos requeridos.

El polimorfismo mejora la reutilización, la flexibilidad y la escalabilidad del código. Una función o interfaz puede procesar muchos tipos de objetos, lo que reduce la duplicación, simplifica el mantenimiento y permite añadir nuevas clases sin tener que reescribir el código que ya las utiliza.

Sí. A través de Duck TypingLas clases no relacionadas que implementan el mismo método se pueden usar indistintamente sin tener un padre compartido. OperaLa sobrecarga de funciones y las funciones integradas como len() también proporcionan polimorfismo sin herencia.

El polimorfismo aparece cuando una función procesa cadenas, listas u objetos personalizados, en controladores de bases de datos que exponen una única API en diferentes motores y en kits de herramientas de interfaz gráfica de usuario donde muchos widgets comparten métodos draw() o update() llamados a través de una interfaz.

Los marcos de IA dependen del polimorfismo. En PyTorch, cada modelo hereda de nn.Module y sobrescribe forward(); en scikit-learn, los estimadores comparten los métodos fit() y predict(), por lo que diferentes algoritmos se ejecutan a través de una interfaz consistente e intercambiable.

Sí. GitHub Copilot y los asistentes de IA con agentes generan funciones de tipo pato, sugieren abstract clases base, y refactorizar métodos repetidos en diseños polimórficos a partir de una breve indicación. RevObserve la salida para confirmar que la lógica y las interfaces son correctas.

Resumir este post con: