У меня есть следующий скрипт:
from abc import ABC, abstractmethod
import dill
class A(ABC):
@abstractmethod
def test(self, a):
"""Abstract method"""
class B(A):
def test(self, a):
return a + 1
if __name__ == '__main__':
test_obj = B()
with open('test_save.pkl', 'wb') as f:
dill.dump(test_obj, f)
Когда я запускаю этот скрипт в среде python 3.6, он успешно выполняется. Когда я запускаю его в среде python 3.7.1, он выдает следующие ошибки:
TypeError: can't pickle _abc_data objects
Одна из найденных работ: переместить определение класса B в отдельный файл и импортировать его - затем спасательные работы. ОДНАКО, предполагая, что я НЕ хочу это делать:
1) существует ли способ сериализации с укропом подкласса абстрактного класса, определенного в том же файле
2), что изменилось между python 3,6 и python 3,7, что вызвало это?