Christian Heimes <[EMAIL PROTECTED]> wrote: > 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 >
That would be great if it worked, but it doesn't. Fixing your typos (missing colons, spelling of deleter, and in B the decorator needs to refer to A.foo.getter): Python 3.0a2 (r30a2:59405M, Dec 7 2007, 15:23:28) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. **************************************************************** Personal firewall software may warn about the connection IDLE makes to its subprocess using this computer's internal loopback interface. This connection is not visible on any external interface and no data is sent to or received from the Internet. **************************************************************** IDLE 3.0a1 >>> class A(object): @property def foo(self): return self._foo @foo.setter def foo(self, value): self._foo = value @foo.deleter def foo(self): del self._foo >>> class B(A): # one can even overwrite the getter in a subclass @A.foo.getter def foo(self): return self._foo * 2 >>> a = A() >>> a.foo = 5 >>> a.foo 10 >>> A.__dict__['foo'] <property object at 0x01261F80> >>> B.__dict__['foo'] <property object at 0x01261F80> Unfortunately as currently implemented, getter setter and deleter just update the existing property, so the getter defined in B changes how the property works in A as well. I think the intention may have been that they should create a new property each time, but this isn't what has been implemented. -- http://mail.python.org/mailman/listinfo/python-list