Python, сохранение изменений, внесенных в импортированный модуль - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть ситуация, когда пользователи могут выбрать другой метод из другого предложения и использовать его в своем классе, используя .im_func.ниже приведен пример

import foo1
import foo2
foo1.ClassX.methodX = foo2.ClassX.methodX.im_func

Где methodX может быть реализован по-разному в обоих модулях.Когда я создаю экземпляр объекта, говорят, что используется foo1.Class(), methodX from module foo2`.

Моя проблема в том, как сохранить сделанные изменения, возможно, как foo3.py, в новый файл исходного кода.

Ответы [ 3 ]

0 голосов
/ 21 апреля 2011

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

0 голосов
/ 21 апреля 2011

Рассматривали ли вы использовать парсер в сочетании с вышеупомянутым inspect для этого? В этой ситуации может быть лучше просто заняться обработкой текста, чем пытаться использовать импортированные модули.

РЕДАКТИРОВАТЬ: Пример использования парсера для печати файла:

with open('foo1.py','r') as fh:
    st = parser.suite(fh.read())
    src1 = parser.st2list(st)

with open('foo2.py','r') as fh:
    st = parser.suite(fh.read())
    src2 = parser.st2list(st)

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

0 голосов
/ 21 апреля 2011

сохранение его как нового py может быть проблемой, но вы можете легко использовать для него сериализацию (модуль pickle)

см .: http://docs.python.org/library/pickle.html

...