Am 28.05.2010 11:31, schrieb eb303: > On May 27, 3:24 pm, Christian Heimes <li...@cheimes.de> wrote: >>> Do I miss something? >>> Is this the way to do it, or is there a better one? >> >> A better way was introduced in Python 2.6. >> Seehttp://docs.python.org/library/functions.html?highlight=property#prop... >> I have a Python only version around if you are still using Python 2.5. >> >> Christian > > Mmmm, I might still miss something. OK, I can replace my initial > property using @property and @p.setter, but it doesn't seem to work in > subclasses: > > class A(object): > @property > def p(self): > return self._p > @p.setter > def _set_p(self, p): > self._p = p > class B(A): > @p.setter > def _set_p(self, p): > … > > results in: > > Traceback (most recent call last): > File "toto.py", line 8, in <module> > class B(A): > File "toto.py", line 9, in B > @p.setter > NameError: name 'p' is not defined
It doesn't work because "p" is not in the scope of B's body while B is created. You have to write class B(A): # access the "p" property from class A @A.p.setter def p(self, p): pass # once p is in the class body scope, you must not use A.p again @p.deleter def p(self): pass Christian -- http://mail.python.org/mailman/listinfo/python-list