Это более общий вопрос, чем для конкретного языка, хотя я столкнулся с этой проблемой во время игры с модулем Python ncurses. Мне нужно было отобразить символы локали и распознать их как символы, поэтому я быстро исправил несколько функций / методов из модуля curses.
Это было то, что я называю быстрым и безобразным решением, даже если оно работает. И изменения были относительно небольшими, поэтому я могу надеяться, что ничего не испортил. Мой план состоял в том, чтобы найти другое решение, но увидев, что оно работает и работает хорошо, вы знаете, как оно есть, я перешел к другим проблемам, с которыми мне приходилось сталкиваться, и я уверен, что если в этом нет ошибки, я никогда не буду сделать это лучше.
Однако мне показался более общий вопрос - очевидно, что некоторые языки позволяют нам монтировать и исправлять большие куски кода внутри классов. Если это код, который я использую только для себя, или небольшое изменение, это нормально. Что, если какой-то другой разработчик примет мой код, он увидит, что я использую какой-то известный модуль, поэтому он может предположить, что он работает так, как он привык. Затем этот метод неожиданно ведет себя иначе, чем должен.
Итак, очень субъективно, должны ли мы использовать исправления для обезьян, и если да, то когда и как? Как мы должны это документировать?
изменить: для @guerda:
Monkey-patching - это возможность динамически изменять поведение некоторого фрагмента кода во время выполнения без изменения самого кода.
Небольшой пример на Python:
import os
def ld(name):
print("The directory won't be listed here, it's a feature!")
os.listdir = ld
# now what happens if we call os.listdir("/home/")?
os.listdir("/home/")