Polimorfismo de programación orientada a objetos de Python: interfaces y tipos de pato
Domina el polimorfismo en Python. Aprenda a escribir código flexible y poco acoplado utilizando tipificación pato, anulación de métodos y clases base abstractas.
Descripción general
Polimorfismo es un término griego que significa "muchas formas". En programación orientada a objetos, se refiere a la capacidad de diferentes clases de responder a la misma llamada de método de una manera única. El polimorfismo le permite escribir una única función que puede procesar muchos tipos diferentes de objetos, siempre que compartan una interfaz común. Esto permite un bajo acoplamiento y hace que sus sistemas de software sean altamente adaptables y fáciles de ampliar.
En Python, el polimorfismo está profundamente ligado a un concepto conocido como Duck Typing. El término proviene de la frase: "Si camina como un pato y grazna como un pato, entonces debe ser un pato". En Python de tipo dinámico, a una función no le importa a qué clase pertenece un objeto; solo le importa si ese objeto implementa los métodos solicitados. Por ejemplo, si tiene una función que llama a `.speak()`, puede pasarle un perro, un gato o un robot; siempre que todos tengan un método `.speak()`, el código se ejecuta perfectamente.
Para arquitecturas más estrictas, Python proporciona clases base abstractas (ABC) a través del módulo incorporado `abc`. Al heredar de `abc.ABC` y usar el decorador `@abstractmethod`, puedes definir interfaces formales que las clases secundarias están obligadas a implementar. Si una clase secundaria no puede definir los métodos abstractos, Python generará un TypeError cuando intente crear una instancia. Equilibrar la escritura flexible con clases abstractas formales es una habilidad clave para diseñar bibliotecas Python resistentes.
Código y salida de ejecución
Implementar clases polimórficas que representan formas que calculan su área.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Must be implemented by subclasses."""
pass
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side * self.side
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * (self.radius ** 2)
# Polymorphic function accepting any Shape
def print_area(shape: Shape):
print(f"Calculated Area: {shape.area():.2f}")
print_area(Square(4))
print_area(Circle(3))Calculated Area: 16.00
Calculated Area: 28.27Implementación paso a paso
- Escribir procesadores de pagos que manejan objetos CreditCard, PayPal y Stripe
- Dibujar varios elementos (texto, imagen) usando un bucle de renderizado unificado
- Burlarse de conexiones API externas durante las pruebas unitarias
Preguntas frecuentes
¿Qué es la mecanografía de pato?
Es el enfoque dinámico de Python al polimorfismo. Comprueba la presencia de métodos y propiedades en tiempo de ejecución en lugar de verificar la herencia de una clase principal específica.
¿Puedes crear una instancia de una clase base abstracta?
No. Intentar crear una instancia de una clase que hereda de ABC y contiene métodos abstractos generará un TypeError.
Temas relacionados
Una introducción completa a las clases, objetos, herencia y conceptos de programación orientada a objetos de Python. Cree modelos de datos sólidos y escale sus aplicaciones Python.
Herencia de programación orientada a objetos de PythonAprenda la herencia en Python OOP. Domine las subclases, los métodos anulados, el uso de super() y múltiples patrones de herencia.
Recursos recomendados de Python
Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.
Cómo ordenar una lista en Python
Aprenda a ordenar una lista en Python usando el método sort() y la función sorted(). Descubra ejemplos de ordenación inversa y clasificación de claves personalizadas.
Hoja de trucos sobre métodos de cadenas de Python
Una guía de referencia completa para la manipulación de cadenas de Python. Domine el formateo, la búsqueda, la división, el reemplazo y la verificación de las propiedades de las cadenas.
Python vs JavaScript: ¿Qué lenguaje de programación es mejor?
Una comparación completa entre Python y JavaScript. Explore las diferencias de sintaxis, el rendimiento, los casos de uso (backend frente a frontend) y ejemplos de codificación.