2016-10-13 6 views

ответ

3

декоратор = функцию, которая принимает функцию в качестве аргумента и возвращает функцию

обезьяны заплаток = заменить значение поля на объект с другим значением (не necessarly функции)

В случае функции патчей обезьян могут выполняться через декоратор. Поэтому я думаю, что декоратор может считаться примером патчей обезьян. Однако обычно исправление обезьян относится к изменению поведения сторонней библиотеки. В этом случае декораторы менее полезны.

2

Я полагаю, что на каком-то грамматическом уровне они могут быть эквивалентными. Тем не менее, декораторы применяются во время определения функции или класса, а monkeypatching изменяет объект во время выполнения, делая их очень разными как по духу, так и в действительном использовании.

+0

В декораторах Python применяются во время выполнения. Функции/классы также «определены» во время выполнения. На самом деле все, даже синтаксические проверки во время исполнения. – freakish

+0

@Bryan Если вы говорите, что исправление обезьяны «изменяет объект», то декораторы также изменяют функции, а функция - это объекты в python. Так это можно сказать правильно? – Kishan

+1

@soupboy: декораторы не изменяют функцию, они принимают функцию в качестве аргумента, а затем возвращают другую функцию. Исходная функция не изменяется. С точки зрения программистов это больше или меньше, чем если бы была изменена оригинальная функция, поэтому я сказал, что их можно считать одинаковыми «на каком-то грамматическом уровне». –