Multiple inheritance, super() and changing signature

Gregory Ewing greg.ewing at canterbury.ac.nz
Fri Jun 3 21:06:21 EDT 2016


Nagy László Zsolt wrote:
> I do not use diamond shapes in my hierarchy, I guess that does not
> affect me. I may be wrong.

If there are no diamonds, there is no need to use super.
Explicit inherited method calls, done correctly, will
work fine.

The only downside is that if your inheritance hierarchy
changes, you need to review all your inherited calls
to make sure they're still correct.

The use of super to address that issue seems attractive.
However, super is only applicable if some rather stringent
requirements are met:

1. All the methods must have compatible signatures.

2. Except for 3 below, all classes participating in the
hierarchy must use super for a given method if any of
them do, including any future subclasses.

3. There must be a class at the top of the hierarchy
that does *not* make super calls, to terminate the chain.

4. It must not matter what order the methods in a super
chain are called. This is because you cannot predict
which method a given super call will invoke. It could
belong to a subclass of the class making the call.

If you can't satisfy *all* of these reqirements, then
you can't use super. Sorry, but that's just the way
super is.

-- 
Greg



More information about the Python-list mailing list