Monkey patching: the good or bad?

A MonkeyPatch is a piece of programming code which extends or modifies other code at runtime . That means, it is making changes to a module or class while the program is running. It is not a standard technique for software development. It's simply the dynamic replacement of attributes at runtime. It remains a workaround to solve an acute problem and has clear drawbacks.

A simple example looks like this:

from SomeOtherProduct.SomeModule import SomeClass def speak(self): return "ook ook eee eee eee!" SomeClass.speak = speak
In the example above, if SomeClass? did not already have a speak() method, it does now :-) If it had a speak() method before, the new code has replaced the old method definition. Monkey patching can only be done in dynamic languages , of which python is a good example. Because Python classes are mutable, and methods are just attributes of the class, you can do this as much as you like - and, in fact, you can even replace classes and functions in a module in exactly the same way.

The following Python example monkey patches the value of Pi from the standard math library.

import math print(math.pi) math.pi = 5 print(math.pi)
output
3.141592653589793 5
AFTER RESTART
import math print(math.pi)
output
3.141592653589793

Pros and Cons

Like many tools in the programming toolbox, can be used both for good and for bad . Of course monkey patching is useful if you know what you are doing and do not have the time to implement a SOLID solution. But you should never consider this a standard technique and build monkey patch upon monkey patch. This is considered bad because it means that an object's definition does not completely or accurately describe how it actually behaves. Also, it creates a discrepancy between the original source code on disk and the observed behaviour. This can be very confusing when troubleshooting, especially for anyone other than the monkeypatch's author. Monkey patching is therefore a kind of antisocial behaviour.