Paolino wrote: > class NotInitializedObjects(type): > def __init__(cls,*_): > realInit=cls.__init__ > def __newInit__(self,*pos,**key): > def _init(): > realInit(self,*pos,**key) > self._init=_init > cls.__init__=__newInit__ > def __getattribute__(self,attr): > def getter(attr): > return object.__getattribute__(self,attr) > if '_init' in getter('__dict__'): > getter('_init')() > del self._init > return getter(attr) > cls.__getattribute__=__getattribute__ >
A lighter solution can be overriding __getattr__. This will produce more object-like behaving instances even when not initialized, aka you can call methods and access class attributes without triggering the init (not very useful) class NotInitializedObjects(type): def __init__(cls,*_): realInit=cls.__init__ def __newInit__(self,*pos,**key): def _init(): realInit(self,*pos,**key) self._init=_init cls.__init__=__newInit__ def __getattr__(self,attr): if hasattr(self,'_init'): self._init() del self._init if hasattr(self,attr): return getattr(self,attr) raise AttributeError cls.__getattr__=__getattr__ ### Test with previous testing code A cleaner solution is decoupling the intensive calculation attributes from __init__ and use descriptors for them.But this is impossible if /the/ instance value is the intensive one to be calculated. Ciao Paolino ___________________________________ Aggiungi la toolbar di Yahoo! Search sul tuo Browser, e'gratis! http://it.toolbar.yahoo.com -- http://mail.python.org/mailman/listinfo/python-list