How to load new class definitions at runtime?

Alex Martelli aleaxit at yahoo.com
Tue Nov 16 01:54:11 EST 2004


SM <sjmaster at gmail.com> wrote:

> aleaxit at yahoo.com (Alex Martelli) wrote in message
news:<1gn8ja3.7d3sbhuk94khN%aleaxit at yahoo.com>...
> > If you need [classes] to be _updatable_ at runtime, look at a recipe by
> > Michael Hudson in the cookbook -- I've updated it for the printed
> > version 2nd ed (since we do have __subclasses__ now, yay!) but that's
> > not done yet.  My vote for most useful custom metaclasses ever...
> 
> That recipe is here:
> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/160164
> 
> Is it correct that this metaclass solution does not handle changes to
> __init__, including new attributes that are bound there? I.e., it

It doesn't rerun __init__ nor any other method on existing instances.

> basically only deals with modification or addition or deletion of
> methods; if you need to add new attributes or have any other new code
> in __init__, you'll have to make new instances for all the old
> instances, or deal with it some other way. In which case would you be
> better off just using that other way from the start?

It's pretty trivial to enhance the recipe to run a per-instance or
per-subclass __make_old_into_new__ method, if that method exists, on all
existing old instances -- if you need to adjust the old instances'
states (==attributes), that strikes me as the best architecture.


Alex



More information about the Python-list mailing list