Help with super()
Mike Meyer
mwm at mired.org
Thu Jan 12 19:13:19 EST 2006
David Hirschfield <davidh at ilm.com> 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
--
Mike Meyer <mwm at mired.org> http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
More information about the Python-list
mailing list