Builtn super() function. How to use it with multiple inheritance? And why should I use it at all?
Ethan Furman
ethan at stoneleaf.us
Mon Aug 2 12:37:51 EDT 2010
Steven D'Aprano wrote:
> On Sat, 31 Jul 2010 13:29:25 +0000, Brian Victor wrote:
>
>> Steven D'Aprano wrote:
>>> On Sat, 31 Jul 2010 14:25:39 +1200, Gregory Ewing wrote:
>>>
>>>> Steven D'Aprano wrote:
>>>>
>>>>> A
>>>>> / \
>>>>> C B
>>>>> \ /
>>>>> D
>>>>> / \
>>>>> E F
>>>>>
>>>>> Yes, a super call might jog left from C to B, but only when being
>>>>> called from one of the lower classes D-F. That's still an upwards
>>>>> call relative to the originator, not sidewards.
>>>> But it's not an upward call relative to the class mentioned in the
>>>> super() call, which is why I say it's misleading.
>>> Which class would that be?
>>>
>>> I think I'm going to need an example that demonstrates what you mean,
>>> because I can't make heads or tails of it. Are you suggesting that a
>>> call to super(C, self).method() from within C might call
>>> B.method(self)?
>> Yes, it would.
> [snip example]
>
> Right, now I see what you mean. I don't have a problem with that
> behaviour, it is the correct behaviour, and you are making the call from
> D in the first place, so it *must* call B at some point.
>
> If you initiate the call from C instead:
[snip]
I think the point is that when D initiates the super() chain, and C
calls super, B will then get its turn -- which has to seem arbitrary
from C's point of view.
~Ethan~
More information about the Python-list
mailing list