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