将腌制的功能加载到不同的类

时间:2018-10-11 17:20:17

标签: python pickle

腌制以下myFunc2时,将其腌制为 main .myFunc2(预期):

import pickle5 as pickle

def myFunc ():
    print ("in my myFunc")

def myFunc2 (foo):
    foo ()

myFunc2 (myFunc)
with open ("c:\\temp\pickle.pkl", "wb") as out:
    pickle.dump (myFunc2, out)

当我反序列化腌制的myFunc时,myFunc2应该在 main 中定义。因此,在任何模块中反序列化myFunc均无效(因为 main 不存在)。因此,此操作失败并出现预期错误:

AttributeError: Can't get attribute 'myFunc2' on <module '__main__' from 'C:\\main.py'>

one.py:

from testClass import testClass

myInstance = testClass()

testClass.py:

将pickle5导入为pickle

class testClass (object):
    """description of class"""
    def __init__ (self):
        with open ("c:\\temp\pickle.pkl", "rb") as inFile:
            pickle.load ( inFile)

我发现的唯一解决方法是在testClass.py模块之外(在用于开始执行的主代码中)定义myFunc2。或者在将其还原到的模块中腌制myFunc2。

问题: 1.有没有一种方法可以使myFunc2腌制,以便可以直接在任何模块中还原它,而不是先启动主执行程序(然后再执行 main

我尝试先设置名称,然后再酸洗其他“ 主要”,但此操作无效。它仍然被腌制为 main .myFunc2

0 个答案:

没有答案