Когда я только начинал изучать Python, большое впечатление на меня произвели route-декораторы в известном фреймворке flask. Конечно, я догадывался, как они могли быть реализованы, но как всегда желание писать (а не читать) превзошло необходимость взглянуть на исходный код flask, и мне пришлось выдумать то, что могло бы выглядеть так же лапидарно, как вышеупомянутые декораторы из flask'а. Упражнение на тему замыканий, декораторов и области видимости в Python могло бы выглядеть так:
def do_something(p):
return p
@implements(do_something, lambda: not p % 2)
def do_mod2_something(p):
return p / 2
@implements(do_something, lambda: not p % 3)
def do_mod3_something(p):
return p / 3
do_something(10) # returns 5
do_something(9) # returns 3
do_something(11) # returns 11
Как реализовать декоратор @implements? Может ли подобная реализация использоваться где-то в реальных проектах — вопрос, который мы редко принимаем во внимание, выдумывая себе упражнения для понимания того, как работают те или иные программы. Мне показалось, что это выглядит как некое замещение (override) функций, имеющих место в других языках программирования.
Читать полностью »