Написал огромный модуль (переписал с php - не мое на py).
Задано оч много Exception, сообщения которых всегда начинаются с некоторого шаблона.
Для примера:
class Server(object): """docstring for Server""" def __init__(self, id_): self.__id = id_ self.__ip = None @property def log_head(self): return "Server ID: {} IP: {}. ".format(self.id, self.ip) @property def ip(self): return self.__ip @property def id(self): return self.__id def test(self): raise SrvException("{}We have some problem.".format(self.log_head))
Хочу убрать (спрятать) self.log_head, чтобы не указывать каждый раз.
Додумался ток до этого:
class SrvException(Exception): _target_srv = None class __metaclass__(type): @property def target_srv(cls): return cls._target_srv @target_srv.setter def target_srv(cls, srv_inst): cls._target_srv = srv_inst def __init__(self, message): ip = SrvException.target_srv.ip id_ = SrvException.target_srv.id message = "Server ID: {} IP: {}. {}".format(id_, ip, message) super(SrvException, self).__init__(message) class Server(object): """docstring for Server""" def __init__(self, id_): SrvException.target_srv = self self.__id = id_ self.__ip = None @property def ip(self): return self.__ip @property def id(self): return self.__id def test(self): raise SrvException("We have some problem.") inst = Server(0) inst.test()
Проблемы:
1) Говорят это не комильфо:
SrvException.target_srv = self
2) Нельзя использовать несколько экземпляров Server из модуля: все завязаны на один класс SrvException.
Подскажите пожалуйста по п.1,2 проблем.
Какой пример? Про наследование?