Отправка сообщений об ошибках между классами - PullRequest
1 голос
/ 05 августа 2011

Хорошо, так что это действительно концептуальный вопрос, с которым у меня возникли небольшие проблемы, а не проблема кодирования.Я строю простой, еженедельный трекер времени, чтобы автоматизировать какого-то администратора в игре.Итак, у меня есть класс TimeSheet и класс TimeBlock.Вот класс расписания с комментарием, в котором я не уверен, что делать.

class Timesheet():
    def __init__(self,person,week):
        self.person = person
        self.week = week
        self.hours = 168
        self.time_blocks = []

    def add_time_block(self,time_block):
    ##Test that the time_block actually fits in this week
        if sum([x.hours for x in self.time_blocks]) >= self.hours-time_block.hours:
            self.time_blocks.append(time_block)
        else: ##This is where I'm not sure what I should do.

Это не ошибка остановки показа, это, вероятно, ошибка PEBKAC, поэтому я думаю, что класс Exceptionиз.То, что я хочу, чтобы табель рабочего времени говорил «нет», не привязывая его к определенному интерфейсу (поэтому я мог бы использовать это сейчас только с CLI, но в конечном итоге добавить GUI, как только я научусь кодировать GUI или веб-интерфейс, который янравятся порты до 3.0).Это не должно нарушать работу программы, но должно предупреждать пользователя о том, что он попытался сделать что-то, что не может быть сделано, и ему нужно сократить этот таймблок, прежде чем он попытается вставить его, изменить некоторые другие таймблоки, чтобы подогнать его, или простоотправить их расписание, потому что расписание заполнено.Какие есть чистые, элегантные способы сделать это?

Ответы [ 2 ]

0 голосов
/ 06 августа 2011

Я бы использовал Исключение. Вы всегда можете обернуть вызов функции из кода поддержки CLI в try ... кроме блока и реагировать там соответствующим образом; Я не вижу недостатков в использовании этой методологии.

0 голосов
/ 05 августа 2011

Вы можете предоставить интерфейс прослушивателя событий, где «заинтересованные стороны» могут зарегистрироваться, чтобы получать события, которые вы генерируете, например, в вашем else выше.Наличие согласованного интерфейса Event позволяет вам интеллектуально реагировать на них, например, иметь тип события (перечисление) или подкласс UserAlertEvent.

...