[Python-3000] super() PEP

Jim Jewett jimjjewett at gmail.com
Tue May 1 00:55:36 CEST 2007


On 4/30/07, Lino Mastrodomenico <l.mastrodomenico at gmail.com> wrote:

> One more thing: what do people think of modifying super so that when
> it doesn't find a method instead of raising AttributeError it returns
> something like "lambda *args, **kwargs: None"?

To me, the most important change is correctness --
super(__this_class__, self) over super(Name, self).  Anything else is
at least debatable.

But of all the shortcuts mentioned, this particular shortcut is easily
the most valuable to me.  At one point, I had even considered giving
the super object a special method to upcall in this manner.

For What Its Worth, in my own code, when I don't know whether or not
the next method exists, I will always be upcalling to the method of
the same name, and passing all my arguments.  Even changing the value
of one argument would be strange enough to count as a special case
worth spelling out.

Alas, Guido's recent opinion was "Don't do that".  He suggested, at a
minimum, inheriting from an ABC that provided the Nothing method.

> Optionally this can be a constant (e.g. default_method) defined
> somewhere so, if necessary, it's still possible to detect if the value
> of super.meth is a real method or the "fake" default_method.

http://www.python.org/sf/1673203 is a patch for adding an identity
method; I suspect a Nothing in the builtins would also make sense.

-jJ


More information about the Python-3000 mailing list