Polimorfismo Python OOP: digitação e interfaces de pato
Domine o polimorfismo em Python. Aprenda como escrever código flexível e fracamente acoplado usando digitação duck, substituição de método e classes base abstratas.
Visão geral
Polimorfismo é um termo grego que significa "muitas formas". Na Programação Orientada a Objetos, refere-se à capacidade de diferentes classes responderem à mesma chamada de método de sua maneira única. O polimorfismo permite escrever uma única função que pode processar muitos tipos diferentes de objetos, desde que compartilhem uma interface comum. Isso permite baixo acoplamento e torna seus sistemas de software altamente adaptáveis e fáceis de estender.
Em Python, o polimorfismo está profundamente ligado a um conceito conhecido como Duck Typing. O termo vem da frase: “Se anda como um pato e grasna como um pato, então deve ser um pato”. No Python de tipo dinâmico, uma função não se importa a qual classe um objeto pertence; ele só se importa se esse objeto implementa os métodos solicitados. Por exemplo, se você tem uma função que chama `.speak()`, você pode passar para ela um Cachorro, um Gato ou um Robô – desde que todos tenham um método `.speak()`, o código funciona perfeitamente.
Para arquiteturas mais rígidas, Python fornece Classes Base Abstratas (ABCs) por meio do módulo `abc` integrado. Herdando de `abc.ABC` e usando o decorador `@abstractmethod`, você pode definir interfaces formais que as classes filhas são forçadas a implementar. Se uma classe filha falhar ao definir os métodos abstratos, o Python gerará um TypeError quando você tentar instanciá-lo. Equilibrar a digitação flexível com classes abstratas formais é uma habilidade fundamental para projetar bibliotecas Python resilientes.
Saída de código e execução
Implementação de classes polimórficas representando formas que calculam sua á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.27Implementação passo a passo
- Escrevendo processadores de pagamento que lidam com objetos CreditCard, PayPal e Stripe
- Desenhar vários elementos (texto, imagem) usando um loop de renderização unificado
- Zombando de conexões de API externas durante testes de unidade
Perguntas frequentes
O que é digitação de pato?
É a abordagem dinâmica do Python para o polimorfismo. Ele verifica a presença de métodos e propriedades em tempo de execução, em vez de verificar a herança de uma classe pai específica.
Você pode instanciar uma classe base abstrata?
Não. Tentar instanciar uma classe que herda de ABC e contém métodos abstratos gerará um TypeError.
Tópicos Relacionados
Uma introdução completa às classes, objetos, herança e conceitos OOP do Python. Crie modelos de dados robustos e dimensione seus aplicativos Python.
Herança Python OOPAprenda herança em Python OOP. Domine subclasses, métodos de substituição, usando super() e vários padrões de herança.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Como classificar uma lista em Python
Aprenda como classificar uma lista em Python usando o método sort() e a função sorted(). Descubra exemplos de classificação de chaves personalizadas e ordem reversa.
Folha de dicas dos métodos de string Python
Um guia de referência completo para manipulação de strings em Python. Domine a formatação, pesquisa, divisão, substituição e verificação de propriedades de string.
Python vs JavaScript: qual linguagem de programação é a melhor?
Uma comparação abrangente entre Python e JavaScript. Explore diferenças de sintaxe, desempenho, casos de uso (backend versus frontend) e exemplos de codificação.