2009-08-26 3 views
2

Я работаю над своей программой GarlicSim, в которой пользователь создает симуляцию, тогда он может манипулировать ею по своему усмотрению, а затем он может сохранить ее в файл.Python: Альтернативы травлению модуля

Недавно я попробовал реализовать функцию сохранения. Естественная вещь, которая возникла для меня, - это очертить объект Project, который содержит всю симуляцию.

Проблема заключается в том, что объект Project также включает в себя модуль - это «пакет моделирования», который представляет собой пакет/модуль, который содержит несколько критических объектов, в основном функций, которые определяют симуляцию. Мне нужно сохранить их вместе с симуляцией, но кажется, что невозможно рассортировать модуль, поскольку я был свидетелем, когда я пытался рассолить объект Project, и было создано исключение.

Что было бы хорошим способом обойти это ограничение?

(Следует также отметить, что пакет моделирования импортируется динамически в программе.)

ответ

1

Если у вас есть исходный код модулей пакетов моделирования, которые я предполагаю, генерируются динамически, то я хотел бы предложить сериализации, что и восстановление модулей при загрузке. Вы сделали бы это в методах Project.__getstate__() и Project.__setstate__().

2

Если у проекта есть ссылка на модуль с нужным вам материалом, похоже, что вы захотите реорганизовать использование этого модуля в класс внутри модуля. Это часто бывает лучше, потому что использование модуля для материала пахнет большим жирным глотком. По моему опыту, такая структура приложения приведет только к неприятностям.

(Конечно, быстрый выход, чтобы сохранить Dict модуля вместо самого модуля.)

+0

Вы имеете в виду, а не ссылки на динамически импортируемый модуль, чтобы ссылаться на класс, определенный внутри динамически импортированный модуль? –

+0

Да; Создание экземпляра класса динамически кажется более чистым, чем динамическое импортирование модуля. – djc

+0

Это интересно. Но я думаю, что это немного проблематично. Способ, которым работает моя программа, заключается в том, что пользователь выбирает, какой пакет имитации импортировать. То есть существуют заранее написанные пакеты моделирования для различных типов моделирования (например, для физики Ньютона, одна для теории игр ...). Вы предлагаете мне просто определить один класс внутри этих предварительно написанных пакетов и все объекты должны быть его атрибутами? –

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