inherit without calling parent class constructor?

Jeff Shannon jeff at ccvcorp.com
Wed Jan 26 18:09:43 EST 2005


Christian Dieterich wrote:

> Hi,
> 
> I need to create many instances of a class D that inherits from a class 
> B. Since the constructor of B is expensive I'd like to execute it only 
> if it's really unavoidable. Below is an example and two workarounds, but 
> I feel they are not really good solutions. Does somebody have any ideas 
> how to inherit the data attributes and the methods of a class without 
> calling it's constructor over and over again?

You could try making D a container for B instead of a subclass:

class D(object):
     def __init__(self, ...):
         self._B = None
     def __getattr__(self, attr):
         if self._B is None:
             self._B = B()
         return getattr(self._B, attr)

Include something similar for __setattr__(), and you should be in 
business.

If it will work for numerous D instances to share a single B instance 
(as one of your workarounds suggests), then you can give D's 
__init__() a B parameter that defaults to None.

Jeff Shannon
Technician/Programmer
Credit International




More information about the Python-list mailing list