Я могу «засечь локальные объекты», если я использую производный класс?

pickle ссылкаговорится, что набор объектов, которые можно мариновать, весьма ограничен. Действительно, у меня есть функция, которая возвращает динамически сгенерированный класс, и я обнаружил, что не могу выбрать экземпляры этого класса:

>>> import pickle
>>> def f():
...     class A: pass
...     return A
... 
>>> LocalA = f()
>>> la = LocalA()
>>> with open('testing.pickle', 'wb') as f:
...     pickle.dump(la, f, pickle.HIGHEST_PROTOCOL)
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: Can't pickle local object 'f.<locals>.A'

Такие объекты слишком сложны дляpickle, Хорошо. Теперь, что волшебства в том, что, если я пытаюсь выбрать подобный объект, но производного класса, это работает!

>>> class DerivedA(LocalA): pass
... 
>>> da = DerivedA()
>>> with open('testing.pickle', 'wb') as f:
...     pickle.dump(da, f, pickle.HIGHEST_PROTOCOL)
...
>>>

Что тут происходит? Если это так просто, то почемуpickle использовать этот обходной путь для реализацииdump метод, который позволяет мариновать "локальные объекты"?

Ответы на вопрос(4)

Ваш ответ на вопрос