diff --git a/hacks.py b/hacks.py index 62e7c29..4ccabef 100644 --- a/hacks.py +++ b/hacks.py @@ -1,5 +1,5 @@ # -# $Id: hacks.py,v 1.1 2011-06-03 21:31:59 wirawan Exp $ +# $Id: hacks.py,v 1.2 2011-06-08 15:49:04 wirawan Exp $ # # Created: 20110603 # Wirawan Purwanto @@ -11,7 +11,21 @@ import sys import new -def make_unbound_instance_method(method): +def make_unbound_method(method): """Generates an unbound instance method from a possibly bound instance method.""" return new.instancemethod(method.im_func, None, method.im_class) + +def make_unbound_method(method): + """Generates an unbound instance method from a possibly bound + instance method, or even user-defined function. + This is useful for injecting external, completely unrelated function + as an instance procedure into a class, without having to subclass + the whole thing. + CAVEAT: This is a haram trick. Know what you are doing.""" + try: + return new.instancemethod(method.im_func, None, method.im_class) + except AttributeError: + # Assume this is a static method or user-defined external method + # injected into this class. + return method