Menu
Coddy logo textTech

Подстановка Лисков

Урок 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!

challenge icon

Задание

Средне

Исправьте данный код, чтобы применить принцип подстановки Лисков —

— функция 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