|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
Только начинаю изучать. Суть такая, есть метод класса возвращающий что-то Код: python 1. 2. 3. 4. 5. 6.
Требуется написать класс с декоратором вокруг функции func1. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И далее вызов Код: python 1. 2. 3. 4. 5. 6. 7.
Вывод Код: python 1. 2. 3.
Вопрос, 1) почему произошел реальный вызов функции func1? я ведь только в переменную stand_alone_function получаю функцию the_wrapper_around_the_original_function таким вызовом stand_alone_function = c.my_new_decorator(c.func1()) 2) Раз вызов func1 произошел, то уж почему тогда без print_ов print ('Я - код, который отработает до вызова функции') print('А я - код, срабатывающий после') ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2017, 17:40 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
AlexGruпочему произошел реальный вызов функции func1? Потому как c.func1() - это и есть реальный вызов функции func1 Скобочки круглые уберите. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2017, 22:07 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
skyANAПотому как c.func1() - это и есть реальный вызов функции func1 Скобочки круглые уберите. Спасибо, помогло, сейчас код Код: python 1. 2. 3. 4. 5. 6. 7.
возвращает Код: python 1. 2.
Но если попытаться вызвать функцию, то ошибки Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2017, 09:40 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
AlexGruВ чем проблема? ИМХО в том, что Вы сами не понимаете, что декорируете и зачем. A guide to Python's function decorators ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2017, 14:11 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
skyANAИМХО в том, что Вы сами не понимаете, что декорируете и зачем. Спасибо, статья хорошая, прочитал. Сделал. Получилось так: Код: 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. 28. 29. 30. 31. 32. 33.
Результат Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Сейчас вопрос, в том, можно ли как-то иначе записать применение декорирования? Вместо этого c.func1=c.check_cache_decorator(c.func1) Декораторов ведь может быть много и тогда длинная нечитабельная запись будет c.func1=XXXXXXXX(YYYYYYYYYYYYY(c.check_cache_decorator(c.func1))) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2017, 23:55 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
AlexGruСейчас вопрос, в том, можно ли как-то иначе записать применение декорирования? Вместо этого c.func1=c.check_cache_decorator(c.func1) Декораторов ведь может быть много и тогда длинная нечитабельная запись будет c.func1=XXXXXXXX(YYYYYYYYYYYYY(c.check_cache_decorator(c.func1))) Хм, очевидно, что выражение, записанное в одну строку Код: python 1.
можно представить в несколько строк Код: python 1. 2. 3.
То есть Код: python 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 17:21 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
skyANA, Спасибо, это понятно. А с использованием @ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2017, 16:33 |
|
Декораторы в Pyhton
|
|||
---|---|---|---|
#18+
AlexGruskyANA, Спасибо, это понятно. А с использованием @ ? ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 18:14 |
|
|
start [/forum/topic.php?fid=23&msg=39542780&tid=1460435]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 149ms |
0 / 0 |