How to call the super implementation of a property?
Beni Cherniavsky
cben at techunix.technion.ac.il
Wed Jan 22 08:53:58 EST 2003
On 2003-01-21, Gonçalo Rodrigues wrote:
> I know I can do
>
> >>> test.n.__get__(b)
> 8
> >>>
>
> But how do I achieve the same using super (for an MI scenario)?
>
Seems that this part is lacking in `super` indeed (I played with it at the
prompt a long time with no success)...
If you control all your classes, there is a simple solution - use `super`
on the accessor method and not on the property:
class test(object):
def get_n(self):
return 1
n = property(get_n)
class test2(test):
def get_n(self):
return super(test2, self).get_n() + 1
n = property(get_n)
This only works if all the classes use the same name for the getter
function (that why I didn't use ``__get_n`` - why did you want mangling
anyway?).
The other solution is to implement your own lookup through the MRO - see
http://www.python.org/2.2.1/descrintro.html#cooperation for an example of
how the current behaiviour of `super` can be written in pure Python.
--
Beni Cherniavsky <cben at tx.technion.ac.il>
More information about the Python-list
mailing list