inheritance problem with 2 cooperative methods

Dan Perl danperl at rogers.com
Thu Dec 2 22:53:57 EST 2004


Thank you very much, Greg, that does the job!  Somehow I couldn't see it and 
I needed someone to point out to me.

Dan

"Greg Ewing" <greg at cosc.canterbury.ac.nz> wrote in message 
news:31a2qgF3acpesU1 at individual.net...
> 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
> 





More information about the Python-list mailing list