>>> class D: ... @property ... def my_property(self): ... '''This should be the docstring''' ... print 'Do stuff' ... >>> print D.my_property.__doc__ This should be the docstring >>> import abc >>> class C: ... __metaclass__ = abc.ABCMeta ... @abc.abstractproperty ... def my_abstract_property(self): ... '''This should be the docstring''' ... print 'Do stuff' ... >>> print C.my_abstract_property.__doc__ A decorator indicating abstract properties. Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the the normal 'super' call mechanisms. Usage: class C: __metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self): ... This defines a read-only property; you can also define a read-write abstract property using the 'long' form of property declaration: class C: __metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx)