Python: альтернативы выбору модуля - PullRequest
3 голосов
/ 26 августа 2009

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 26 августа 2009

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

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

1 голос
/ 26 августа 2009

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

...