Написал код, иллюстрирующий принцип разделения интерфейсов(ISP). Скажите, всё ли понятно и наглядно получилось? Возможно ли его улучшить?
Вот неправильный пример, здесь рабочий имеет возможность увеличивать себе зарплату:
from abc import ABCMeta, abstractmethod
class Person(metaclass=ABCMeta):
def __init__(self, pay):
self.pay = pay
@abstractmethod
def getPay(self):
pass
@abstractmethod
def setPay(self):
pass
class Boss(Person):
def getPay(self):
print('i am boss. my pay is: ', self.pay)
def setPay(self, pay):
self.pay = pay
class Worker(Person):
def getPay(self):
print('i am worker. my pay is: ', self.pay)
def setPay(self, pay):
self.pay = pay
boss = Boss(100)
boss.getPay()
boss.setPay(120)
boss.getPay()
worker = Worker(10)
worker.getPay()
worker.setPay(20)
worker.getPay()
А вот правильный пример. Здесь рабочий не имеет возможности увеличивать себе зарплату потому что его класс реализует только соответствующий статусу интерфейс, а не все какие есть:
from abc import ABCMeta, abstractmethod
class Person(metaclass=ABCMeta):
def __init__(self, pay):
self.pay = pay
@abstractmethod
def getPay(self):
pass
class Person_(metaclass=ABCMeta):
@abstractmethod
def setPay(self):
pass
class Boss(Person, Person_):
def getPay(self):
print('i am boss. my pay is: ', self.pay)
def setPay(self, pay):
self.pay = pay
class Worker(Person):
def getPay(self):
print('i am worker. my pay is: ', self.pay)
boss = Boss(100)
boss.getPay()
boss.setPay(120)
boss.getPay()
worker = Worker(10)
worker.getPay()
worker.setPay(20) # error
worker.getPay()
Я пытался максимально сократить и упростить код примеров, но чтобы при этом не пострадала понятность материала. Получилось ли?
Возможно, я сам не до конца понимаю принцип ISP. И объяснять кому-то ещё будет рановато...