O que é Polimorfismo e Como Ele Promove a Reutilização de Código?
Polimorfismo é o próximo conceito chave da programação orientada a objetos (OOP) sobre o qual falaremos.
Com polimorfismo, você tem acesso a uma interface onde pode interagir com muitos objetos do mesmo tipo.
Vamos dar uma olhada mais profunda no polimorfismo e como ele permite que você reutilize código.
O polimorfismo permite que métodos em diferentes classes compartilhem o mesmo nome mas executem tarefas diferentes. Você chama o mesmo nome de método em objetos diferentes e cada um responde de sua própria maneira.
Aqui está o exemplo básico de polimorfismo:
class A:
def action(self): ...
class B:
def action(self): ...
class C:
def action(self): ...
Class().method() # Works for A, B, or C
Aqui está um exemplo usando diferentes sons de animais para representar polimorfismo:
class Cat:
def speak(self):
return "A cat meow"
class Bird:
def speak(self):
return "A bird tweet"
class Monkey:
def speak(self):
return "A monkey ooh ooh aah aah ooh ooh aah aah"
def animal_sound(animal):
print(animal.speak())
animal_sound(Cat())
animal_sound(Bird())
animal_sound(Monkey())
Neste exemplo, animal_sound() é uma função que recebe qualquer objeto com um método speak().
Quando você passa um Cat, Bird e Monkey, ele chama o método speak() do objeto e imprime o resultado. Como cada classe define speak() de forma diferente, você obtém saídas diferentes da mesma função. Isso é polimorfismo em ação.
Aqui está outro exemplo, desta vez com instâncias e um atributo:
class Twitter:
def __init__(self, content):
self.content = content
def post(self):
return f"🐦 Tweet: '{self.content}' (280 chars max)"
class Instagram:
def __init__(self, content):
self.content = content
def post(self):
return f"📸 Instagram Post: '{self.content}' + ✨ filters"
class LinkedIn:
def __init__(self, content):
self.content = content
def post(self):
return f"💼 LinkedIn Article: '{self.content}' (Professional Mode)"
def start(social_media):
print(social_media.post()) # Calls .post() on any object
# Instances
tweet = Twitter('Just learned Python polymorphism!')
photo = Instagram('Sunset vibes 🌅')
article = LinkedIn('Why OOP matters in 2024')
# The polymorphic calls - same function, different outputs
start(tweet) # 🐦 Tweet: 'Just learned Python polymorphism!' (280 chars max)
start(photo) # 📸 Instagram Post: 'Sunset vibes 🌅' + ✨ filters
start(article) # 💼 LinkedIn Article: 'Why OOP matters in 2024' (Professional Mode)
Também existe um tipo de polimorfismo chamado inheritance-based polymorphism.
No polimorfismo baseado em herança, uma classe pai define um método e múltiplas classes filhas sobrescrevem esse método à sua maneira. Você pode então chamar o mesmo método em qualquer objeto filho e ele se comporta de forma diferente dependendo de qual classe filha ele é.
Aqui está um exemplo:
class Animal:
def speak(self):
return 'Some generic sound'
class Cat(Animal):
def speak(self):
return 'A cat meow'
class Dog(Animal):
def speak(self):
return 'A dog barks woof woof'
class Monkey(Animal):
def speak(self):
return 'A monkey ooh ooh aah aah ooh ooh aah aah'
print(Cat().speak()) # A cat meow
print(Dog().speak()) # A dog barks woof woof
print(Monkey().speak()) # A monkey ooh ooh aah aah ooh ooh aah aah
print(Animal().speak()) # Some generic sound
Você pode ver que cada classe filha da classe pai Animal sobrescreve o método speak() para fornecer sua própria implementação. Então, quando você chama o método speak() em uma instância de cada subclasse, ele retorna o som específico associado a esse animal.
Você também pode ir além e fazer a chamada em uma lista, depois percorrer a lista para exibir o que o método speak() retorna para cada um:
animals = [Cat(), Dog(), Monkey()]
for animal in animals:
print(animal.speak())
# Output:
# A cat meow
# A dog barks woof woof
# A monkey ooh ooh aah aah ooh ooh aah aahEste módulo não possui perguntas. Marque como concluído.