""" Rather than defining your get/set/del methods at the class level, as is usually done, e.g. class MyClass(object): def __init__(self): self._foo = "foo" def getfoo(self): return self._foo def setfoo(self, value): self._foo = value def delfoo(self): del self._foo foo = property(getfoo, setfoo, delfoo, "property foo's doc string") I would like to suggest the following alternative idiom: """ class MyClass(object): def __init__(self): self._foo = "foo" self._bar = "bar" def foo(): doc = "property foo's doc string" def fget(self): return self._foo def fset(self, value): self._foo = value def fdel(self): del self._foo return locals() # credit: David Niergarth foo = property(**foo()) def bar(): doc = "bar is readonly" def fget(self): return self._bar return locals() bar = property(**bar())