469,927 Members | 1,835 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,927 developers. It's quick & easy.

Doc error on super(cls,self)

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()
super(Mammal,cat1).talk2() Mammal2: Fluffy says Purr super(Animal,cat1).talk2() AttributeError: 'super' object has no attribute 'talk2' Cat.__mro__

(<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

Jul 18 '05 #1
2 1594
David MacQuigg <dm*@gain.com> wrote in message news:<pd********************************@4ax.com>. ..
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
Jul 18 '05 #2
On 11 Jun 2004 21:04:40 -0700, mi***************@poste.it (Michele
Simionato) wrote:
David MacQuigg <dm*@gain.com> wrote in message news:<pd********************************@4ax.com>. ..
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

Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Kerim Borchaev | last post: by
reply views Thread by Michele Simionato | last post: by
2 posts views Thread by John F Dutcher | last post: by
10 posts views Thread by Chris Green | last post: by
6 posts views Thread by David Hirschfield | last post: by
5 posts views Thread by Erwan Adam | last post: by
12 posts views Thread by iu2 | last post: by
18 posts views Thread by Richard Szopa | last post: by
1 post views Thread by lpyth | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.