Сериализация подкласса абстрактного класса в python 3.7.1 - PullRequest
1 голос
/ 08 марта 2020

У меня есть следующий скрипт:

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, что вызвало это?

...