super and __init__ arguments (Was: Re: Multiple inheritance with a common base class)

Duncan Booth duncan.booth at invalid.invalid
Tue Aug 10 11:26:38 EDT 2004


Markus Bertheau <twanger at bluetwanger.de> wrote in 
news:mailman.1447.1092145129.5135.python-list at python.org:

> Now how do I make the following work:
> 
> class CommonBase(object):
>     def __init__(self, c):
>         pass
>   
> class LeafA(CommonBase):
>     def __init__(self, c, a):
>         super(LeafA, self).__init__(c)
>   
> class LeafB(CommonBase):
>     def __init__(self, c, b):
>         super(LeafB, self).__init__(c)
>   
> class Multi(LeafA, LeafB):
>     def __init__(self, c, a, b):
>         super(Multi, self).__init__(c, a, b)
>   
> m = Multi(0, 1, 2)
> 

The best way is to use keyword arguments:

class CommonBase(object):
    def __init__(self, c):
        pass
  
class LeafA(CommonBase):
    def __init__(self, a, **kw):
        super(LeafA, self).__init__(**kw)
  
class LeafB(CommonBase):
    def __init__(self, b, **kw):
        super(LeafB, self).__init__(**kw)
  
class Multi(LeafA, LeafB):
    def __init__(self, **kw):
        super(Multi, self).__init__(**kw)
  
m = Multi(c=0, a=1, b=2)



More information about the Python-list mailing list