Подстановка Лисков
Урок 24 из 28 курса Clean Code — пишите код лучше на Python на Coddy.
«Функции, которые используют указатели или ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом».
Этот принцип гласит, что дочерний класс должен быть заменяемым своим родительским классом.
Например,
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}')Как вы видите, и SMS, и Email наследуются от Notification, но один отправляет на email, а другой — на phone. Класс SMS не является заменяемым для своего родителя Notification!
Задание
СреднеИсправьте данный код, чтобы применить принцип подстановки Лисков —
— функция notify должна принимать только message в качестве аргумента.
— Email и SMS должны иметь конструкторы, которые будут инициализировать email и phone соответственно.
— отредактируйте код, чтобы применить изменения
Это лишь один из предложенных вариантов применения принципа Лисков, существуют и другие рабочие решения!
Попробуйте сами
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)