2016-08-09 1 views
0

Я заметил, что когда мой объект содержит явную ссылку на модуль, pickling он не сможет из-за этого.Почему функции можно мариновать, но не модули?

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

Почему Python может определять функции, но не модули?

+0

@ Модули Tommy - объекты – MaxB

+0

isinstance (математика, объект) => True – MaxB

+0

правильный, извините. Я пытался понять, каков желаемый результат травления модуля? Код? Штат? – Tommy

ответ

2

Потому что они не поддерживают код для этого. Типы уровней C (и даже модули, написанные на Python, реализуются с типом уровня C) требуют поддержки pickle.

Нелегко определить, что следует мариновать, если разрешено мариновать module; импортировать одно и то же имя на другой стороне, было бы просто, но если вы на самом деле пытаетесь разгадать сам модуль, беспокойство будет заключаться в том, что вы хотите также определить состояние модуля. Это еще более сбивает с толку, если модуль является модулем расширения C, где состояние модуля даже не может быть подвержено самому Python, которое используется только внутри C-слоя.

Учитывая, что вы хотите получить определенные вещи от модуля, а не всего модуля (который обычно не упоминается как состояние, только импортированное на верхнем уровне), преимущества поддержки травления для модулей ограничены, а семантика - неясно, они не потрудились его реализовать.

Смежные вопросы