[Python-Dev] python and super
fuzzyman at voidspace.org.uk
Thu Apr 14 18:10:11 CEST 2011
On 14/04/2011 17:02, Raymond Hettinger wrote:
> On Apr 14, 2011, at 8:34 AM, P.J. Eby wrote:
>> At 03:55 PM 4/14/2011 +0100, Michael Foord wrote:
>>> Ricardo isn't suggesting that Python should always call super for you, but when you *start* the chain by calling super then Python could ensure that all the methods are called for you. If an individual method doesn't call super then a theoretical implementation could skip the parents
>>> methods (unless another child calls super).
>> That would break classes that deliberately don't call super. I can think of examples in my own code that would break, especially in __init__() cases.
>> It's perfectly sensible and useful for there to be classes that intentionally fail to call super(), and yet have a subclass that wants to use super(). So, this change would expose an internal implementation detail of a class to its subclasses, and make "fragile base class" problems worse. (i.e., where an internal change to a base class breaks a previously-working subclass).
> I agree. Better for someone to submit a recipe for a variant of super and see if there is any uptake.
In Python 3 super is treated specially by the compiler, so an
alternative implementation that behaves similarly to the built-in one
modulo this change is not possible.
Two use cases for the suggested alternative behaviour have been
presented. What is the use case for a method not wanting to prevent its
*sibling* methods in a multiple inheritance situation being called?
I believe the use case Phillip (and others) have presented is for
methods preventing their *parent* methods being called.
All the best,
May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing http://www.sqlite.org/different.html
More information about the Python-Dev