Help with super()

Mike Meyer mwm at
Thu Jan 12 19:13:19 EST 2006

David Hirschfield <davidh at> writes:
> I'm having trouble with the new descriptor-based mechanisms like
> super() and property() stemming, most likely, from my lack of
> knowledge about how they work.
> Here's an example that's giving me trouble, I know it won't work, but
> it illustrates what I want to do:
> class A(object):
>     _v = [1,2,3]
>      def _getv(self):
>         if self.__class__ == A:
>             return self._v
>         return super(self.__class__,self).v + self._v
>     v = property(_getv)
> class B(A):
>     _v = [4,5,6]
>    b = B()
> print b.v
> What I want is for b.v to give me back [1,2,3,4,5,6], but this example
> gets into a recursive infinite loop, since super(B,self).v is still
> B._getv(), not A._getv().
> Is there a way to get what I'm after using super()?

Yes. Call super with A as the first argument, not self.__class__.

That's twice in the last little bit I've seen someone incorrectly use
self.__class__ instead of using the class name. Is there bogus
documentation somewhere that's recommending this?

Mike Meyer <mwm at>
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.

More information about the Python-list mailing list