[Python-ideas] Enhance reload
Terry Reedy
tjreedy at udel.edu
Sat Sep 29 21:16:05 CEST 2007
"Joseph Maurer" <clarkksv at yahoo.com> wrote in
message news:844399.5421.qm at web58901.mail.re1.yahoo.com...
| I'd like to see the reload feature of Python enhanced so it can replace
the methods for existing class instances, references to methods, and
references to functions.
I think would we could get farther by restricting concern to replacing
class attributes so that existing class instances would use their new
definitions.
As I understand, the problem is this. After somemod is imported, 'import
somemod' simply binds 'somemod' to the existing module object, while
'reload somemod' replaces the module object with a new object with all new
contents, while references to objects within the old module object remain
as are.
So I propose this. 'Reclass somemod' (by whatever syntax) would execute
the corresponding code in a new namespace (dict). But instead of making
that dict the __dict__ attribute of a new module, reclass would match class
names with the existing __dict__, and replace the class.__dict__
attributes, so that subsequent access to class attributes, including
particularly methods, would get the new versions. In other words use the
existing indirection involved in attribute access. New classes could
simple be added. Deleted classes could be disabled, but this really
requires a restart after editing files that reference such classes, so
deleting classes should not be done for the restricted reload uses this
idea is aimed at.
It would probably be possible to modify function objects (replace
func_code, etc), but this is more difficult. It is simpler, at least for a
beginning, to require that functions be put within a class when reclassing
is anticipated.
Terry Jan Reedy
More information about the Python-ideas
mailing list