Doc error on super(cls,self)

D

David MacQuigg

I think there is a documentation error in both the Library Reference
section 2.1 and the Python 2.2 Quick Reference page 19. The
explanation for this function is:

super( type[, object-or-type])
Returns the superclass of type.

I could not get this function to work right until I realized that it
is searching the entire MRO, not just the superclasses of 'type'.
Here is a simple experiment to show the difference.

## Animal -> Mammal -> Feline -> Cat
## talk1() talk1() talk1()
## \ - - - -> Mammal2 - - - - - - -> /
## talk2()(<class '__main__.Cat'>, <class '__main__.Feline'>,
<class '__main__.Mammal'>, <class '__main__.Mammal2'>,
<class '__main__.Animal'>, <type 'object'>)

The first call finds talk2, even though it is *not* in a superclass of
Mammal. The second call fails, because talk2 is not found in any
class above Animal in the MRO.

I think a better explanation would be:

super(cls,self).meth(arg)
This calls method 'meth' from a class in the MRO (Method Resolution
Order) of 'self'. The selected class is the first one which is above
'cls' in the MRO and which contains 'meth'.

I would like to get some feedback before submitting this as a bug.

-- Dave
 
M

Michele Simionato

David MacQuigg said:
I think there is a documentation error in both the Library Reference
section 2.1 and the Python 2.2 Quick Reference page 19. The
explanation for this function is:

super( type[, object-or-type])
Returns the superclass of type.

Aha! Now I see why for a while in the past I thought 'super' was returning
the superclass: I had read the documentation!

The sentence you report here is clearly WRONG and misleading, since 'super'
returns a 'super object' which is a descriptor acting more or less as a proxy
to the methods in the MRO. 'super' by no means is returning the superclass.
So please submit the documentation bug. If nobody has already done that,
I will volunteer to write a tutorial on 'super', since it is rather tricky
and terribly documented in the standard docs.

Michele Simionato
 
D

David MacQuigg

David MacQuigg said:
I think there is a documentation error in both the Library Reference
section 2.1 and the Python 2.2 Quick Reference page 19. The
explanation for this function is:

super( type[, object-or-type])
Returns the superclass of type.

Aha! Now I see why for a while in the past I thought 'super' was returning
the superclass: I had read the documentation!

The sentence you report here is clearly WRONG and misleading, since 'super'
returns a 'super object' which is a descriptor acting more or less as a proxy
to the methods in the MRO. 'super' by no means is returning the superclass.
So please submit the documentation bug. If nobody has already done that,
I will volunteer to write a tutorial on 'super', since it is rather tricky
and terribly documented in the standard docs.

I will submit the bug report.

I think a tutorial would be very helpful. The only clear (but
lengthy) explanation I have found is GvR's paper at
http://python.org/2.2.3/descrintro.html#cooperation (see "Cooperative
methods and super" pp.14-18 in the printed version) I've tried to
condense this into a brief summary in my OOP chapter at
http://ece.arizona.edu/~edatools/Python/PythonOOP.doc (see "Super
Calls" on p.14-15). I could add your tutorial as an example or
exercise, or link to your website, if you have a relatively permanent
place.

-- Dave
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,981
Messages
2,570,188
Members
46,733
Latest member
LonaMonzon

Latest Threads

Top