Используемая нами сторонняя библиотека содержит довольно длинную функцию, которая использует внутри нее вложенную функцию. Наше использование этой библиотеки вызывает ошибку в этой функции, и мы очень хотели бы решить эту ошибку.
К сожалению, поддерживающие библиотеки несколько медленны с исправлениями, но мы не хотим, чтобы их разветвляли. Мы также не можем проводить наш выпуск до тех пор, пока они не исправят проблему.
Мы предпочли бы использовать исправление обезьяны, чтобы исправить эту проблему, поскольку это легче отслеживать, чем исправлять исходный код. Тем не менее, повторить очень большую функцию, где просто замена внутренней функции будет достаточно ощущать излишний, и затрудняет для других, что именно мы изменили. Мы застряли со статическим патчем к библиотечному яйцу?
Внутренняя функция полагается на закрытие переменной; надуманный пример:
def outerfunction(*args):
def innerfunction(val):
return someformat.format(val)
someformat = 'Foo: {}'
for arg in args:
yield innerfunction(arg)
где мы хотели бы заменить только реализацию innerfunction()
. Фактическая внешняя функция намного длиннее. Разумеется, мы будем повторно использовать закрытую переменную и поддерживать подпись функции.