Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
1

Использование декораторов

22.02.2017, 16:18. Показов 3653. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задача сделать декоратор, который бы подключался к базе данных, выполнял некоторые действия, передавал соединение к бд и курсор во внутреннюю функцию. После выполнения функции - выполнял еще пару действий.
Написанный код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def query_in_session(fn):
    def wrapped():
        con = cx_Oracle.connect(settings.HYDRA_CONNECTION_STRING)
 
        try:
            cur = con.cursor()
            try:
                assert isinstance(cur, cx_Oracle.Cursor)
                assert isinstance(con, cx_Oracle.Connection)
 
                cur.callproc(**settings.INIT_SESSION)
                cur.callproc(**settings.SET_ACTIVE_FIRM)
                res = fn(cur, con)
                cur.callproc(**settings.CLOSE_SESSION)
                con.commit()
            except cx_Oracle.Error:
                res = False
            finally:
                cur.close()
        except cx_Oracle.Error:
            res = False
        finally:
            con.close()
 
        return res
 
    return wrapped()
Но есть одна проблема - чтобы были доступны объект соединения с бд и курсор нужно писать вот так:
Python
1
2
3
@query_in_session
def some_sunc(cur, con):
    .....
А хочется
Python
1
2
3
@query_in_session
def some_sunc():
    .....
Можно ли так сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2017, 16:18
Ответы с готовыми решениями:

Генератор декораторов
Напишите генератор декораторов check_password, т. е. функцию, которая возвращает декоратор....

Генератор декораторов
Напишите генератор декораторов check_password, т. е. функцию, которая возвращает декоратор. ...

Python понимание декораторов
Всем добрый день! Начал разбираться с декораторами. В принципе, все понятно, кроме одного момента....

Нужно реализовать задачу с использованием итераторов и декораторов
Помогите пожалуйста, реализовать задачу с использованием итераторов и декораторов. from random...

47
Заблокирован
25.02.2017, 23:27 41
Author24 — интернет-сервис помощи студентам
Wi0M, короче, ненужная канитель, которая портит регулярность синтаксиса, и вводит ненужные сущности в язык, усложняя его без надобности.

Но за пояснения спасибо
0
394 / 122 / 48
Регистрация: 26.10.2013
Сообщений: 734
25.02.2017, 23:31 42
foo(my_shiny_new_decorator)
0
Заблокирован
25.02.2017, 23:42 43
Цитата Сообщение от Wi0M Посмотреть сообщение
в пайтоне могу сделать
насколько я понимаю, в питоне это делается только через магические методы, иначе это будет вычисленно как арифметический оператор
0
394 / 122 / 48
Регистрация: 26.10.2013
Сообщений: 734
26.02.2017, 00:44 44
actionpattern, не понял
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
26.02.2017, 01:02 45
actionpattern, хочешь язык вообще без синтаксического сахара бери go, там вырезали практически все.
0
Заблокирован
26.02.2017, 01:30 46
Wi0M, ну, через всякие там __add__ и прочее.

Добавлено через 5 минут
Цитата Сообщение от alex925 Посмотреть сообщение
хочешь язык вообще без синтаксического сахара
Сахар сахару рознь, это понятие растяжимое. Когда в языке он реализуется через операторы, спецформы и тп -- это плохо, это замусоривает язык. И говорит о его слабости, кстати говоря.

тру принцип дизайна языков:
не сваливать в кучу разные полезные конструкции и средства, а напротив — удалить слабости и ограничения, вызывающие необходимость добавления в язык новых возможностей
Если бы гвидо придерживался этого принципа, питонисты бы не глотали по новой версии в год без обратной совместимости
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
26.02.2017, 02:36 47
actionpattern, Не пиши о том чего не понимаешь, ты этим себя только на посмешище выставляешь.

Обратной совместимости нет, только между 2 и 3 версией. Это вполне себе нормальная ситуация, когда язык вырос и чтобы не тащить за собой разные архаичные проблемы и ошибки выпустили версию без обратной совместимости. Такое случается со всеми языками, мусор всех прошлых лет тащит за собой только java и из-за этого внедрение нового функционала там большая боль (от этого же там внедряются разные велосипеды и не логичности, только для того, чтобы сохранить обратную совместимость).
0
Заблокирован
26.02.2017, 03:00 48
alex925, угу, насрать на юзеров под благовидными предлогами гораздо проще. Вопрос лишь в том, до какой степени юзеры готовы это говно глотать.

Добавлено через 2 минуты
Цитата Сообщение от actionpattern Посмотреть сообщение
до какой степени юзеры готовы это говно глотать.
причем, под раздачу попадают и потребители продуктов, написанных на волшебном ЯП, в контексте поддержки.
Не исключено, что поциэнта по этой причине из гугла турнули

Добавлено через 14 минут
Цитата Сообщение от alex925 Посмотреть сообщение
собой только java
я знаю еще, как минимум JS. ЕМНИП, Scheme до 6-й версии, а в 7-й, вроде как вернули.
На самом деле их не мало, думается. Просто мы не все знаем
0
26.02.2017, 03:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2017, 03:00
Помогаю со студенческими работами здесь

Реализация декораторов вне зависимости от количества аргументов и их имен
Доброго времени. У меня есть код с декораторами def bold(x): def wrapped(): return...

Задача "Генератор декораторов"
Напишите генератор декораторов check_password, т. е. функцию, которая возвращает декоратор....

Разработка, отладка и испытание программ с применением декораторов свойств классов
Продемонстрируйте работу декоратора через задание свойств объекта класса конструктором, сеттером и...

С помощью декораторов устранить уязвимость Фродо к Назгулам и оку Саурона.
Люди добрые, прошу помочь с решение задачи на декораторы... Мерри и Пиппин, утащившие палантир у...

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. 2
4. Проверить упорядочены ли элементы строк матрицы. Если нет, то упорядочить их в порядке...

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
помогите решить: Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали...

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru