Можно ли каким-то образом * вживую * изменять код Python (например, в Lisp или Erlang)

Мне было интересно, можно ли каким-то образом изменить код Python вживую, сохраняя при этом все состояния экземпляров объектов и методов, например, я думаю, что возможно в Lisp или Erlang (*)?

Скажем, у меня есть активные сеансы Python, в которых я создал экземпляр foo класс из самописного модуля:

class foo():
   @classmethod
   def do_something(self):
       print "this is good"

Командная строка Python:

>>> f =foo()
>>> f.do_something()

Теперь я хотел бы изменить оператор печати на что-нибудь другое (например, print «это лучше» ). Если я отредактирую свой файл модуля для этого и перезагружу его, мне придется повторно создать экземпляр объекта f . Есть ли способ снова вызвать f.do_something () без предварительного вызова f = foo () ?

Итак, я должен сделать следующее:

>>> reload my_module
>>> f =foo()
>>> f.do_something() # with changed print statement

Но я хочу сделать следующее:

>>> reload my_module
>>> f.do_something() # with changed print statement

(*) Я основываю это утверждение на крутом фильме на Erlang и на этом фрагменте из Practical Common Lisp : ' Когда ошибка проявляется в дикой природе - 100 в миллионах миль от Земли - команда смогла диагностировать и исправить работающий код , что позволило завершить эксперименты. '

Edit: Я немного подумал подробнее об этом и, возможно, то, что я хочу, по своей сути несовершенно для применения к объектно-ориентированному программированию (то есть, как насчет состояния класса и методов). Я думаю, что Erlang позволяет это, потому что, насколько я помню, это больше касается отдельных взаимодействующих объектов, поэтому обновление кода объекта в реальном времени имеет больше смысла. Я не уверен, поэтому все еще открыт для ответов.

Edit2: obj12 [объект Объект] сообщение pr1 pr2 беспорядок

Однако как выполнить итерацию внутренних объектов ( obj1, obj2 ) и их собственных свойств ( prop1, prop2 )?

14
задан Raymond Chenon 25 March 2011 в 16:33
поделиться