super with only one argument

Steven Bethard steven.bethard at gmail.com
Mon Mar 14 12:40:23 EST 2005


When would you call super with only one argument?  The only examples I 
can find of doing this are in the test suite for super.  Playing around 
with it:

py> class A(object):
...     x = 'a'
...
py> class B(A):
...     x = 'b'
...
py> s = super(B)
py> s.x
Traceback (most recent call last):
   File "<interactive input>", line 1, in ?
AttributeError: 'super' object has no attribute 'x'

So I can't access class attributes with a single-argument super.

You can see that there are some interesting attributes on a super object:

py> for name in dir(s):
...    if not hasattr(object, name):
...        print name, getattr(s, name)
...
__get__ <method-wrapper object at 0x011FD050>
__self__ None
__self_class__ None
__thisclass__ <class '__main__.B'>

Looks like I can call the descriptor machinery directly to get an attribute:

py> s.__get__(B).x
'a'
py> s.__get__(B, B()).x
'a'

But this doesn't seem horribly useful.  And __self__, __self_class__ and 
__thisclass__ are readonly, so I can't bind a super object to an 
instance once it's been created.

So what's the use case?

Thanks in advance,

STeVe

P.S. The context here is that I'm trying to submit a patch to clarify 
the docs on super a bit.  But I realized that I don't actually 
understand its behavior with only a single argument...



More information about the Python-list mailing list