Hot Patching Python Objects
Hot patching is a touchy issue, it's often frowned upon, and rightly so. But sometimes it's the easiest way to get what you want.
Usually in Python you would patch a class with a new method, which works fine. But what if you only wanted to patch a single instance of that class, and not all of them?
Turns out that's pretty easy with the types library.
To use it you define your patch method as a regular function, then you call types.MethodType to properly bind it, and you are done!
Here is a simple example:
#!/usr/bin/env python import types class Chicken(object): def cluck(self): return "cluck, cluck" chicken = Chicken() # Prints, "cluck, cluck" print chicken.cluck() duck = Chicken() # Define our patch method def quack(self): return "quack! quack!" # Bind it properly to the duck instance duck.quack = types.MethodType(quack, duck) # Prints "quack! quack!" print duck.quack() # Bind it again, overriding the cluck method duck.cluck = types.MethodType(quack, duck) # Prints "quack! quack!" print duck.cluck() # Prints "cluck, cluck" print chicken.cluck() # Now override cluck at the class level Chicken.cluck = quack # Prints "quack! quack!" print chicken.cluck()