On Dec 12, 2:23 pm, "Chris Mellon" <[EMAIL PROTECTED]> wrote: > On Dec 12, 2007 12:53 PM, George Sakkis <[EMAIL PROTECTED]> wrote: > > > > > On Dec 12, 1:12 pm, Christian Heimes <[EMAIL PROTECTED]> wrote: > > > > Kay Schluehr wrote: > > > > class A(object): > > > > foo = property: > > > > def fget(self): > > > > return self._foo > > > > def fset(self, value): > > > > self._foo = value > > > > > which was translated as follows: > > > > > class A(object): > > > > def thunk(): > > > > def fget(self): > > > > return self._foo > > > > def fset(self, value): > > > > self._foo = value > > > > return vars() > > > > foo = propery(**thunk()) > > > > del thunk > > > > Python 2.6 and 3.0 have a more Pythonic way for the problem: > > > > class A(object): > > > @property > > > def foo(self): > > > return self._foo > > > > @foo.setter > > > def foo(self, value) > > > self._foo = value > > > > @foo.deletter > > > def foo(self) > > > del self._foo > > > > class B(A): > > > # one can even overwrite the getter in a subclass > > > @foo.getter > > > def foo(self): > > > return self._foo * 2 > > > > Christian > > > This is by definition Pythonic since it was conceived by the BDFL.It > > is also certainly an improvement over the current common practice of > > polluting the class namespace with private getters and setters. Still > > it's a kludge compared to languages with builtin support for > > properties. > > How exactly is this a kludge?
In three (at least) ways: 1. The property name ('foo') is repeated *5* times for a single class. Talk about DRY. 2. Total inconsistency: @property for the getter when it is defined for the first time, @foo.setter/@foo.deletter for the setter/deletter, @foo.getter when the getter is redefined. WTF ?! > This is almost identical syntax (but with less indentation) to a C# property > declaration. 3. Less indentation is not an advantage here; typically ones wants all two or three related functions that define the property to stand out as a separate group, not be mixed with regular public methods. Sorry, C# wins hands down on this. George -- http://mail.python.org/mailman/listinfo/python-list