Liskov substitution
Lección 24 de 28 del curso Clean Code - Write better code using Python de Coddy.
"Las funciones que utilizan punteros o referencias a clases base deben poder utilizar objetos de clases derivadas sin saberlo."
Este principio establece que una clase hija debe poder sustituirse por su clase padre.
Por ejemplo:
class Notification(ABC):
@abstractmethod
def notify(self, message, email):
pass
class Email(Notification):
def notify(self, message, email):
print(f'Send {message} to {email}')
class SMS(Notification):
def notify(self, message, phone):
print(f'Send {message} to {phone}')Como puedes ver, tanto SMS como Email heredan de Notification, pero una envía a email y la otra a phone; la clase SMS no puede sustituirse por su clase padre Notification.
Desafío
IntermedioCorrige el código proporcionado para aplicar el principio de sustitución de Liskov:
- La función notify solo debería recibir message como argumento.
- Email y SMS deberían tener cada uno un constructor que inicialice email y phone, respectivamente.
- edita el código para aplicar los cambios
Esta es solo una solución sugerida para aplicar el principio de Liskov; ¡hay más que funcionarán!
Pruébalo tú mismo
from abc import ABC, abstractmethod
class Notification(ABC):
@abstractmethod
def notify(self, message, email):
pass
class Email(Notification):
def notify(self, message, email):
print(f'Send {message} to {email}')
class SMS(Notification):
def notify(self, message, phone):
print(f'Send {message} to {phone}')
if __name__ == '__main__':
email = input()
phone = input()
message = input()
notification1 = Email()
notification2 = SMS()
notification1.notify(message, email)
notification2.notify(message, phone)
Todas las lecciones de Clean Code - Write better code using Python
Practica por tu cuenta: Compilador de Python online