53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
# Polimorfismo em Python Orientado a Objetos
|
|
# Polimorfismo é o princípio que permite que
|
|
# classes deridavas de uma mesma superclasse
|
|
# tenham métodos iguais (com mesma assinatura)
|
|
# mas comportamentos diferentes.
|
|
# Assinatura do método = Mesmo nome e quantidade
|
|
# de parâmetros (retorno não faz parte da assinatura)
|
|
# Opinião + princípios que contam:
|
|
# Assinatura do método: nome, parâmetros e retorno iguais
|
|
# SO"L"ID
|
|
# Princípio da substituição de liskov
|
|
# Objetos de uma superclasse devem ser substituíveis
|
|
# por objetos de uma subclasse sem quebrar a aplicação.
|
|
# Sobrecarga de métodos (overload) 🐍 = ❌
|
|
# Sobreposição de métodos (override) 🐍 = ✅
|
|
from abc import ABC, abstractmethod
|
|
|
|
|
|
class Notificacao(ABC):
|
|
def __init__(self, mensagem):
|
|
self.mensagem = mensagem
|
|
|
|
@abstractmethod
|
|
def enviar(self) -> bool: ...
|
|
|
|
|
|
class NotificacaoEmail(Notificacao):
|
|
def enviar(self) -> bool:
|
|
print('E-mail: enviando - ', self.mensagem)
|
|
return True
|
|
|
|
|
|
class NotificacaoSMS(Notificacao):
|
|
def enviar(self) -> bool:
|
|
print('SMS: enviando - ', self.mensagem)
|
|
return False
|
|
|
|
|
|
def notificar(notificacao: Notificacao):
|
|
notificacao_enviada = notificacao.enviar()
|
|
|
|
if notificacao_enviada:
|
|
print('Notificação enviada')
|
|
else:
|
|
print('Notificação NÃO enviada')
|
|
|
|
|
|
notificacao_email = NotificacaoEmail('testando e-mail')
|
|
notificar(notificacao_email)
|
|
|
|
notificacao_sms = NotificacaoSMS('testando SMS')
|
|
notificar(notificacao_sms)
|