Вот в чем проблема. Скажем, я хочу замариновать экземпляр класса следующим образом:
Код: Выделить всё
import dill
class Test():
def __init__(self, value=10):
self.value = value
def foo(self):
print(f"Bar! Value is: {self.value}")
t = Test(value=20)
with open('Test.pkl', 'wb+') as fp:
dill.dump(t, fp)
# Test it
print('Original: ')
t.foo() # Prints "Bar! Value is: 20"
Код: Выделить всё
class Test():
def __init__(self, value=10):
self.value = value
def foo(self):
print("...not bar?")
with open('Test.pkl', 'rb') as fp:
t2 = dill.load(fp)
# Test it
print('Reloaded: ')
t2.foo() # Prints "...not bar?"
Код: Выделить всё
t2.value
Код: Выделить всё
class Test():
def __init__(self, value=10):
self.value = value
def foo(self):
print(f"Bar! Value is: {self.value}")
t = Test(value=20)
with open('Test.pkl', 'wb+') as fp:
dill.dump(Test, fp)
# Test it
print('Original: ')
t.foo() # Prints "Bar! Value is: 20"
Код: Выделить всё
class Test():
def __init__(self, value=10):
self.value = value
def foo(self):
print("...not bar?")
with open('Test.pkl', 'rb') as fp:
test_class = dill.load(fp)
t2 = test_class()
# Test it
print('Reloaded: ')
t2.foo() # Prints "Bar! Value is: 10"
В настоящее время для восстановления этих объектов я копирую файлы исходного кода, но импорт становится очень беспорядочным — множество манипуляций с sys.path сбивают с толку, чтобы убедиться, что я загружаю правильный старый исходный код. Я также мог бы сделать что-то, где я мариную определение класса с помощью dill, а затем сохраняю все атрибуты в json или что-то в этом роде и перестраиваю таким образом, но мне интересно, есть ли простой способ сделать это с помощью dill или какого-либо другого пакета, который я еще не обнаружили. Мне кажется, это простой вариант использования.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python