Multiple Inheritance and super() (was Re: [Merge] lp:~vila/bzr/389648-hook-calls-base into lp:~bzr/bzr/trunk)

Ivan Sagalaev maniac at softwaremaniacs.org
Sat Nov 7 20:38:56 GMT 2009


John Arbash Meinel wrote:
> In python2.5 you could have written this as:
> 
> class Mixin1(object):
>   def __init__(self, keyword1=None, **kwargs):
>      super(Mixin1, self).__init__(**kwargs)
>      self.keyword1 = keyword1
> 
> class Mixin2(object):
>   def __init__(self, keyword2=None, **kwargs):
>      super(Mixin2, self).__init__(**kwargs)
>      self.keyword2 = keyword2
> 
> class Mixed(Mixin1, Mixin2):
>   def __init__(self, keyword1=None, keyword2=None, **kwargs):
>     super(Mixed, self).__init__(keyword1=keyword1, keyword2=keyword2,
>                                 **kwargs)
> 
> And it would have worked, and the parameters would have been passed to
> the appropriate base class.
> 
> In Python2.6 this fails because object.__init__() doesn't take any
> parameters.

John, I've copy-pasted this exact code and added:

     mixed = Mixed(keyword1='test1', keyword2='test2')
     print mixed.__dict__

It works well under Python 2.6.4 giving

     {'keyword2': 'test1', 'keyword1': 'test2'}



More information about the bazaar mailing list