Является ли Monkey patching хорошей практикой программирования?

MonkeyPatch - это часть кода программирования, которая расширяет или изменяет другой код во время выполнения. Это означает, что он вносит изменения в модуль или класс во время работы программы. Это не стандартная методика разработки программного обеспечения. Это просто динамическая замена атрибутов во время выполнения. По-прежнему является обходным решением для решения острой проблемы и имеет явные недостатки.

Простой пример выглядит следующим образом:

В примере выше, если SomeClass? еще не имеет метода talk(), теперь он 🙂 Если раньше у него был метод talk(), новый код заменил старое определение метода.

Патч обезьяны может выполняться только в динамических языках, примером чего является python. Поскольку классы Python изменяемы, а методы - просто атрибуты класса, вы можете делать это столько, сколько хотите - и, фактически, вы можете даже заменить классы и функции в модуле точно так же.

Следующая обезьяна-пример Python исправляет значение Pi из стандартной математической библиотеки.

Выход

ПОСЛЕ РЕСТАРТА

Выход

Плюсы и минусы

Как и многие инструменты в панели инструментов программирования, их можно использовать как для хорошего, так и для плохих. Конечно, исправление обезьян полезно, если вы знаете, что делаете, и у вас нет времени для реализации решения SOLID. Но вы никогда не должны считать это стандартной техникой и строить патч обезьяны на патче обезьяны.

Это считается плохим, потому что это означает, что определение объекта не полностью или точно не описывает, как оно себя ведет. Кроме того, это создает несоответствие между исходным кодом на диске и наблюдаемым поведением. Это может быть очень запутанным при устранении неполадок, особенно для кого-либо, кроме автора monkeypatch. Таким образом, исправление обезьян - это своего рода антиобщественное поведение.

Источник: http://net-informations.com/python/iq/patching.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *