Dan Perl wrote:
So far, so good! But let's assume that I want to change the __init__ methods so that they take a configuration as an argument so the objects are created and configured in one step, like this:
alpha = A(config)

One way would be to make the setConfig call only in the root class, and perform the initialisation that it depends on *before* making the super call in each __init__ method, i.e.

class A (object):
   def __init__(self, config):
      self.x = 0
      self.setConfig(config)

class B (A):
   def __init__(self, config):
      self.y = 0
      super(B, self).__init__(config)

class C (B):
   def __init__(self, config):
      self.z = 0
      super(C, self).__init__(config)

This works here because each of the initialisation
operations is self-contained. It might not work so well
in real life if some of the base class state needs to be
initialised before the subclass initialisation can be
performed. However, it's worth considering -- I came
across the same sort of problem several times in
PyGUI, and I usually managed to solve it by carefully
arranging initialisations before and after the super
call.

If you can't use that solution, I would suggest you
keep the __init__ and setConfig operations separate,
and live with having to call setConfig after creating
an object. Factory functions could be provided if
you were doing this a lot.

--
Greg Ewing, Computer Science Dept,
University of Canterbury,       
Christchurch, New Zealand
http://www.cosc.canterbury.ac.nz/~greg

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to