Когда отслеживается следующий 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 будет определенв основной .Поэтому десериализация 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:
import pickle5 как pickle
class testClass (object):
"""description of class"""
def __init__ (self):
with open ("c:\\temp\pickle.pkl", "rb") as inFile:
pickle.load ( inFile)
Единственный обходной путь, который я нашел, - это определить myFunc2 вне модуля testClass.py (в основном коде, используемом для запуска выполнения).Или протравите myFunc2 в том же модуле, в котором он будет восстановлен.
Вопрос: 1. Есть ли способ протравить myFunc2 таким образом, чтобы его можно было восстановить непосредственно в любом модуле, кроме того, который был запущен в mainвыполнение (кроме main )
Я пытался установить name до выбора другого, кроме " main ", но это не сработало.Это все еще мариновано как main .myFunc2