Загрузка маринованной функции в другой класс - PullRequest
0 голосов
/ 11 октября 2018

Когда отслеживается следующий 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

...