Травление статического метода в Python

Я пытался выбрать объект, который содержит ссылки на методы статического класса. Рассол не удается (например, наmodule.MyClass.fooзаявив, что это не может быть засолен, какmodule.foo не существует.
Я пришел к следующему решению, используя объект-оболочку для определения местоположения функции при вызове, сохраняя класс контейнера и имя функции:

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)

Мне вот интересно, есть ли лучший - более стандартный способ - засолить такой объект? Я не хочу вносить изменения в глобальномpickle процесс (используяcopy_reg например), но будет полезен следующий шаблон: class MyClass (object): @picklable_staticmethod def foo (): выведите «done».

Мои попытки этого не увенчались успехом, особенно потому, что я не смог извлечь класс владельца изfoo функция. Я даже был готов согласиться на явные спецификации (такие как@picklable_staticmethod(MyClass)) но я не знаю, как ссылаться наMyClass класс прямо там, где это определяется.

Любые идеи будут великолепны!

Йонатан

Ответы на вопрос(2)

Ваш ответ на вопрос