Menu
Coddy logo textTech

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Python