Подстановка Лисков
Урок 24 из 28 курса Clean Code — пишите код лучше на Python на Coddy.
«Функции, использующие указатели или ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом».
Этот принцип утверждает, что дочерний class должен быть взаимозаменяемым с родительским class.
Например:
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; class SMS не является взаимозаменяемым со своим родительским class 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)
Все уроки раздела Clean Code — пишите код лучше на Python
Потренируйтесь самостоятельно: Онлайн-компилятор Python