Accessing parent objects

Steven D'Aprano steve+comp.lang.python at pearwood.info
Mon Mar 26 06:23:54 EDT 2018


On Mon, 26 Mar 2018 10:43:25 +0200, Antoon Pardon wrote:

> But did they start up cleaning the standard library yet? I'll confess
> I'm only using 3.5 but when I go through the standard library I see a
> lot of classes still using the old style of calling the parant method,
> which makes it more difficult to use in a multiple inheritance scheme.
> Those that don't inheret, don't call super themselves, which makes them
> also more difficult to use in a multiple inheritance scheme.

Ah, that's a separate question! And it's a good observation.

You are right that there is a lot of legacy code in the std lib that 
doesn't use super, and probably should. Fixing that is probably a good 
project for some kindly volunteer wanting to get into Python bug-
fixing :-)

But you can usually fix that in your own code with a simple adaptor class 
that delegates to the old-style class. See for example:

https://code.activestate.com/recipes/577721

https://rhettinger.wordpress.com/2011/05/26/super-considered-super/


> One of the problems with this is that when you go through the mro you
> will ultimatly end up calling object.method(self, spam, eggs, cheese)
> which will thrown an exception like: AttributeError: 'super' object has
> no attribute 'method'

Why in the name of all the gods would you call super() on a method you 
aren't inheriting from a superclass???

I'm sorry if my example was inaccurate or misleading, but please be 
reasonable. Calling super in a method which you aren't overloading is not 
a reasonable thing to do.


> So I find your example misleading. It is just one step, and you need a
> carefully designed hierarchy to make it work correctly and incorporating
> standard library classe into that hierarchy is not self-evident.

You *always* need a carefully designed hierarchy.

super or no super, single inheritance or delegation or multiple 
inheritance, you can't expect to just randomly throw classes together in 
a slap-dash manner and have them work.



-- 
Steve




More information about the Python-list mailing list