Use of lambda functions in OOP, any alternative?

Pablo incall at msn.com
Tue May 23 10:03:06 EDT 2006


Pablo ha escrito:

> Hello all, sorry if this is a faq...
>
> Problem: The intended effect is to override the method 'getattr' in a
> way that i dont need to override the property explicitly too.
>
> class Base(object):
>     def __init__(self, attr):
>         self._attr = attr
>     def getattr(self):
>         return self._attr
>     attr = property(fget=getattr)
>
> class Derived(Base):
>     def getattr(self):
>         return 2*self._attr
>
> if __name__ == "__main__":
>     b = Base(4)
>     d = Derived(4)
>     print b.attr, d.attr
>
> output>> 4 8 ... so this does not work as i would like it to.
sorry, i meant the following sentence:
output>> 4 4 ... so this does not work as i would like it to.
>
> First solution: This is not what i want.
>
> class Derived(Base):
>     def getattr(self):
>         return 2*self._attr
>     attr = property(fget=getattr)
>
> Second solution: This is what i want, but...
>
> class Base(object):
>     def __init__(self, attr):
>         self._attr = attr
>     def getattr(self):
>         return self._attr
>     attr = property(fget=lambda self: self.getattr())
>
> class Derived(Base):
>     def getattr(self):
>         return 2*self._attr
>
> Question: Isn't there an *alternative* way to do it without the lambda
> function?
> 
> Thanks in advance!




More information about the Python-list mailing list