У меня есть проблема, которую можно упростить следующим образом: у меня есть определенный набор объектов, которые я хочу изменить определенным образом.Итак, я могу написать функцию, которая модифицирует отдельный объект, а затем создать декоратор, который применяет эту функцию ко всем объектам в наборе.
Итак, давайте предположим, что у меня есть что-то вроде этого:
def modify_all(f):
def fun(objs):
for o in objs:
f(o)
@modify_all
def modify(obj):
# Modify obj in some way.
modify(all_my_objs)
Однако могут также быть случаи, когда я просто хочу оперировать одним объектом самостоятельно.
Есть ли способ "декорировать" функцию modify
программным способом, чтобы снова вернуть исходную функцию (один объект)?(Я имею в виду, не просто удаляя декоратор.) Или есть другой подход, который лучше использовать в таком случае?
Просто для ясности и полноты в фактическом modify_all
декораторе происходит гораздо больше, чем показано здесь.И modify
, и modify_all
должны выполнить определенное количество работы, поэтому я подумал, что декоратор может быть хорошим.Кроме того, у меня есть другие варианты modify
, которые могут непосредственно извлечь выгоду из modify_all
, что делает его еще более полезным.Но иногда мне нужно делать что-то, используя оригинальную функцию modify
.Я знаю, что всегда могу передать одноэлементный набор, чтобы «обмануть» его, чтобы он работал как есть, но мне интересно, есть ли лучший способ или лучший дизайн для ситуации.