Python 接收端未定义取消勾选类

Python 接收端未定义取消勾选类,python,pickle,Python,Pickle,,类通常以这样的方式进行酸洗,即它们要求接收端的模块中存在完全相同的类。但是,我注意到还有一些类的\uu getstate\uu()和\uu setstate\uuu()方法,它们会影响实例的pickle方式 创建一个元类,允许对从该元类创建的类(换句话说,该元类的实例)进行pickle和unpickle,即使接收端不存在这些类,该元类的可行性如何?(尽管我认为元类可能必须存在。) 在类或元类中使用\uuuuu reduce\uuuu()方法也需要研究吗?类必须以某种方式出现在接收端,因为方法

,类通常以这样的方式进行酸洗,即它们要求接收端的模块中存在完全相同的类。但是,我注意到还有一些类的
\uu getstate\uu()
\uu setstate\uuu()
方法,它们会影响实例的pickle方式

创建一个元类,允许对从该元类创建的类(换句话说,该元类的实例)进行pickle和unpickle,即使接收端不存在这些类,该元类的可行性如何?(尽管我认为元类可能必须存在。)



在类或元类中使用
\uuuuu reduce\uuuu()
方法也需要研究吗?

类必须以某种方式出现在接收端,因为方法不是与对象一起存储的。因此,我认为不幸的是,使用特定的元类是没有帮助的,在这里…

我知道
marshal
不适用于用户定义的类,但是是否可以将它用于函数对象(或者那些函数的代码对象,尽管在这种情况下需要使用
inspect.getfullargspec()
或确保类的方法的默认参数和存储的所有参数的东西?利用
marshal.dumps()
marshal.loads()
…有趣的是:有希望(但我想不出任何具体的想法):)我认为,问题在于代码对象可能在Python的不同版本之间发生变化,而且
封送
并不像
pickle
那样用于序列化,因此不能保证会破坏向后兼容性。。。我想这就是为什么允许它使用这样的代码对象。我想,最终,最好的做法可能只是将类作为字符串发送(使用
inspect.getsource()
获取类的源代码),然后在接收端执行
exec
字符串。