Python's super() considered super!

Eric Snow ericsnowcurrently at gmail.com
Fri May 27 13:56:29 EDT 2011


On Fri, May 27, 2011 at 4:37 AM, Steven D'Aprano <
steve+comp.lang.python at pearwood.info> wrote:

> On Fri, 27 May 2011 18:49:52 +1000, Ben Finney wrote:
>
> > Raymond Hettinger <python at rcn.com> writes:
> >
> >> Hope you enjoyed the post.
> >
> > I certainly did.
> >
> > But I'm not better enlightened on why ‘super’ is a good thing.
>
> Perhaps Raymond assumed that by now everybody knows that multiple
> inheritance in Python that doesn't use super is buggy. super() was
> introduced in version 2.2 in order to overcome bugs in MI, making it
> about 8 years old now.
>
> (Technically, it's only MI with diamond-shaped inheritance, but that
> applies to *all* new-style classes. If you're writing multiple
> inheritance in Python 3 without using super, your code is a land-mine
> waiting to go off. If you're writing single inheritance, it's *still* a
> land-mine, just waiting for some poor caller to use it in a MI context.)
>
> But I do agree with you in that I expected to see at least some
> discussion of why super should be actively preferred over calling the
> parent class directly.
>
>
Seems like he does just that for most of the first section.


>
>
> The
> > exquisite care that you describe programmers needing to maintain is IMO
> > just as much a deterrent as the super-is-harmful essay.
>
> I don't see that Raymond describes anything needing "exquisite care".
> It's more common sense really: ensure that your method signature and that
> of your parents' match, plus good work-arounds for when they don't.
> Anyone using inheritance is almost certainly 98% of the way there, unless
> they're writing classes like this and wondering why they don't work :)
>
> class MyBrokenList(list):
>    def __len__(self):
>        n = list.__len__(self, extra=42)
>        return n + 1
>    def __getitem__(self, i):
>        return list.__getitem__(self) + 1
>    def last_item(self):
>        return list.last_item(self) + 1
>
>
> I was thrilled to learn a new trick, popping keyword arguments before
> calling super, and wondered why I hadn't thought of that myself. How on
> earth did I fail to realise that a kwarg dict was mutable and therefore
> you can remove keyword args, or inject new ones in?
>
> Given the plethora of articles that take a dim, if not outright negative,
> view of super, it is good to see one that takes a positive view. Thanks
> Raymond!
>
>
+1

-eric


>
>
> --
> Steven
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20110527/09ca1e57/attachment-0001.html>


More information about the Python-list mailing list