Decapado de un método estático en Python

He estado tratando de encurtir un objeto que contiene referencias a métodos de clase estática. Pickle falla (por ejemplo enmodule.MyClass.foo) indicando que no puede ser decapado, comomodule.foo no existe.
He encontrado la siguiente solución, utilizando un objeto contenedor para ubicar la función en la invocación, guardando la clase de contenedor y el nombre de la función:

class PicklableStaticMethod(object):
    """Picklable version of a static method.
    Typical usage:
        class MyClass:
            @staticmethod
            def doit():
                print "done"
        # This cannot be pickled:
        non_picklable = MyClass.doit
        # This can be pickled:
        picklable = PicklableStaticMethod(MyClass.doit, MyClass)
    """
    def __init__(self, func, parent_class):
        self.func_name = func.func_name
        self.parent_class = parent_class
    def __call__(self, *args, **kwargs):
        func = getattr(self.parent_class, self.func_name)
        return func(*args, **kwargs)

Me pregunto, sin embargo, ¿existe una forma mejor, más estándar, de encurtir un objeto así? No quiero hacer cambios a lo global.pickle proceso (usandocopy_reg por ejemplo), pero el siguiente patrón sería genial: class MyClass (object): @picklable_staticmethod def foo (): print "done."

Mis intentos en esto no tuvieron éxito, específicamente porque no pude extraer la clase de propietario defoo función. Incluso estaba dispuesto a conformarme con una especificación explícita (como@picklable_staticmethod(MyClass)) pero no conozco ninguna forma de referirme a laMyClass clase justo donde se está definiendo.

Cualquier idea sería genial!

Yonatan

Respuestas a la pregunta(2)

Su respuesta a la pregunta