Stefan Rank <[EMAIL PROTECTED]> wrote in news:[EMAIL PROTECTED]:
> I think there is no need for a special @syntax for this to work. > > I suppose it would be possible to allow a trailing block after any > function invocation, with the effect of creating a new namespace that > gets treated as containing keyword arguments. > I suspect that without any syntax changes at all it will be possible (for some stack crawling implementation of 'propertycontext', and assuming nobody makes property objects immutable) to do: class C(object): with propertycontext() as x: doc = """ Yay for property x! """ def fget(self): return self._x def fset(self, value): self._x = value for inheritance you would have to specify the base property: class D(C): with propertycontext(C.x) as x: def fset(self, value): self._x = value+1 propertycontext could look something like: import sys @contextmanager def propertycontext(parent=None): classframe = sys._getframe(2) cvars = classframe.f_locals marker = object() keys = ('fget', 'fset', 'fdel', 'doc') old = [cvars.get(key, marker) for key in keys] if parent: pvars = [getattr(parent, key) for key in ('fget', 'fset', 'fdel', '__doc__')] else: pvars = [None]*4 args = dict(zip(keys, pvars)) prop = property() try: yield prop for key, orig in zip(keys, old): v = cvars.get(key, marker) if v is not orig: args[key] = v prop.__init__(**args) finally: for k,v in zip(keys,old): if v is marker: if k in cvars: del cvars[k] else: cvars[k] = v _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com