程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用Python腌制静态方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决用Python腌制静态方法?

开发过程中遇到用Python腌制静态方法的问题如何解决?下面主要结合日常开发的经验,给出你关于用Python腌制静态方法的解决方法建议,希望对你解决用Python腌制静态方法有所启发或帮助;

这似乎有效。

class PickleableStaticmethod(object):
    def __init__(self, fn, cls=NonE):
        self.cls = cls
        self.fn = fn
    def __call__(self, *args, **kwargs):
        return self.fn(*args, **kwargs)
    def __get__(self, obj, cls):
        return PickleableStaticmethod(self.fn, cls)
    def __getstate__(self):
        return (self.cls, self.fn.__name__)
    def __setstate__(self, statE):
        self.cls, name = state
        self.fn = getattr(self.cls, Name).fn

诀窍是在从类中获得静态方法时,将其锁定。

备选方案:您可以使用元类化为所有静态方法.__parentclass__赋予属性。然后,您可以子类化,Pickler并为每个子类实例提供其自己的.dispatch表,然后可以对其进行修改而不会影响全局调度表(Pickler.dispatch)。进行酸洗,解酸和调用方法可能会更快一些。

解决方法

我一直在尝试腌制一个包含对静态类方法的引用的对象。泡菜失败(例如@H_594_5@module.MyClass.foo),表示无法进行泡菜(因为@H_594_5@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():打印“完成”。

我的尝试没有成功,特别是因为我无法从foo函数中提取所有者类。我什至愿意满足显式规范(例如@picklable_staticmethod(MyClass))的要求,但是我不知道@H_594_5@myClass在定义类时直接引用该类的任何方法。

任何想法都很棒!

约纳坦

大佬总结

以上是大佬教程为你收集整理的用Python腌制静态方法全部内容,希望文章能够帮你解决用Python腌制静态方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。