#!/usr/bin/env python3 class Product: def __init__(self, title): self.title = title def setPrice(self, price): try: if price <= 0: raise Exception('wrong price!') self.price = price except Exception as e: print('error: ', e) product = Product('phone') product.setPrice(-10)
Вот пример получше, но тоже неправильный:
#!/usr/bin/env python3 class Product: def __init__(self, title, logger): self.title = title self.logger = logger def setPrice(self, price): try: if price <= 0: raise Exception('wrong price!') self.price = price except Exception as e: self.logger.fillLog(e) class Logger: def __init__(self): self.log = [] def makeLog(self, message): print('error: ', message) def fillLog(self, message): self.log.append(message) logger = Logger() product = Product('phone', logger) product.setPrice(-10)
LIVE DEMO
во втором примере меня больше всего беспокоит несоответствие принципу открытости/закрытости. как видите, логгер имеет два способа логирования, но чтобы из переключать всё равно приходится править метод setPrice класса Product. то есть здесь явное несоотвтетсвие принципу открытости/закрытости.
помогите пожалуйста найти приемлемое для SRP и OCP решение.