[Python-ideas] Proposal for an enhanced reload mechanism
Peter Ingebretson
pingebre at yahoo.com
Tue Oct 19 22:46:24 CEST 2010
(Sorry, I sent an html-formatted email by accident)
--- On Tue, 10/19/10, Chris Kaynor <ckaynor at zindagigames.com> wrote:
> > This is a proposal (pre-PEP?) for an enhanced reloading mechanism
> > especially designed for iterative development:
> >
> > https://docs.google.com/document/pub?id=1GeVVC0pXTz1O6cK5mo-EaOJFqrL3PErO4okmHBlTeuw
> >
> > The basic plan is to use the existing cycle-detecting GC to remap
> > references from objects in the old module to equivalent objects in
> > the new module.
>
> What happens if you change the __init__ or __new__ methods of an object
> or if you change a class's metaclass? It seems like those types of
> changes would be impossible to propagate to existing objects, and without
> propagating them any changes to existing objects may (are likely?) to
> break the object.
Yes, this is a limitation of the approach. More generally, any logic that
has already run and would execute differently with the reloaded module has
the potential to break things.
Even with this limitation I think the approach is still valuable. I spend
far less time modifying __new__ methods and metaclasses than I spend
changing the implementation and API ofother class- and module-level methods.
The issue of old instances not having members that are added in a new
__init__ is problematic, but there are several workarounds such as
temporarily wrapping the new member in a property, or potentially the
@reloadable decorator alluded to in the doc.
More information about the Python-ideas
mailing list