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 ser sustituible 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 uno envía a email y el otro a phone; ¡la clase SMS no es sustituible por su padre Notification!
Desafío
IntermedioCorrige el código dado para aplicar el principio de sustitución de Liskov -
- la función notify solo debe recibir message como argumento.
- Email y SMS deben 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)