Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > Использование процедур |
Автор: diam 12.2.2007, 15:03 | ||||
Итак, есть рутинный код.
Собственно говоря, блоки с рутиной повторяются периодически, и как-то неправильно писать по несколько раз один и тот же код. Сразу же напрашивается использование процедур (ООП здесь использовать, на мой взгляд, нерационально, так как рутинные действия используются только в одном месте - при загрузке информации с сайта). Что нужно блокам для использования в моём случае? Только имя пользователя, под которым заходить на сайт. И всё. А получить нужно объект загрузчика, причём тот, где произошла ошибка. Например, загружали машины, нужен объект loader.car.get_loader(), загружали модели, нужен loader.model.get_loader(). В голову пришёл только такой вариант:
Но этот вариант мне совершенно ненравится из-за использования global. Какие ещё могут быть варианты? |
Автор: Daevaorn 12.2.2007, 18:29 |
Не очень понимаю зачем тут global. мне кажется либо нужно возвращать loader из функции, либо объявить его вне функции. |
Автор: diam 12.2.2007, 19:34 | ||
loader из функции возвращать не получится, поскольку может быть сгенерировано исключение. А вот записать так действительно можно:
Ещё варианты? |
Автор: Daevaorn 12.2.2007, 19:51 |
я не знаю что такое loader, поэтому не могу понять почему у тебя что-то вызвает проблему |
Автор: setq 12.2.2007, 22:38 |
Вложи в try... for по ('User1', 'User2'...) . |
Автор: sir_Jack 12.2.2007, 23:10 | ||
тоже не до конца осознал суть кода, но если тебе надо знать в котором из вызовов load_car, load_model произошло исключение, то почему бы не внести это в переменную?
Не то? |
Автор: diam 15.2.2007, 13:11 | ||
Другого решения не нашёл.
У кого ещё будут мысли? |
Автор: albertn 15.2.2007, 15:08 |
А почему бы не использовать классы, передавать их в функцию, а функция уже будет менять внутренние поля. Добавлено @ 15:09 кстати и функции можно определить внутри этого класса |
Автор: diam 15.2.2007, 15:33 | ||||||
Код в "кусках кода" жутко утрирован. И переменная "x" в моём настоящем коде есть объект loader:
Поэтому мне так важна эта переменная. А куски кода запихал в функции piece_of_code по причине частой повторяемости кода. Но может я неверно воспринимаю, что ты хочешь сказать?
albertn, покажи пример, пожалуйста. |
Автор: albertn 15.2.2007, 15:57 | ||
Переделал исходный код:
Хотя мне не нравится запись вида loader = loader.model.get_loader('User1'), и мне кажется, что красивее менять поля самого объекта а не заменять объект на другой. |
Автор: diam 15.2.2007, 19:24 | ||
albertn, идея понятна, спасибо. Замечания. 1. В таком виде оно не работает. Проверил на Python2.5. И было бы странно, если бы заработало. Потому как loader.car и loader.model - это модули, что такое x.loader.car и x.loader.model? 2. Как я уже говорил, всевозможные loader'ы - это разные объекты. Каждый из них отвечает за определённую страницу на сайте. Более того, одна и та же страница под разными пользователями позволяет делать разные вещи (скачивать счета в формате pdf под одним, просматривать список входящих машин под другим; ну это так, для примера). Соответственно, у этих загрузчиков и информация разная, и методы её выуживания, и методы её представления. Поэтому "менять поля самого объекта" не получится. Если довести до рабочего вида, будет примерно следующее:
За идею +. |
Автор: albertn 16.2.2007, 09:34 |
Код не проверял, т.к. у меня небыло самого loader Это тот-же самый loader, только лежащий внутри объекта x Спасибо |