[Python-ideas] inheriting docstrings

Eric Snow ericsnowcurrently at gmail.com
Fri Jun 10 21:08:08 CEST 2011

On Fri, Jun 10, 2011 at 12:40 PM, Eric Snow <ericsnowcurrently at gmail.com> wrote:
> Right now you could do something like this:
>    def get_basedoc(mro):
>        return next(c.__doc__ for c in mro[1:] if c.__doc__) or None
>    class Meta(type):
>        __basedoc__ = property(lambda cls: get_basedoc(cls.__mro__))
> But then instances don't get __basedoc__, since the metaclass is not
> in the MRO.  To get it on instances you could do this:
>    class C:
>        __basedoc__ = property(lambda self: get_basedoc(self.__class__.__mro__))
> But then getting that attribute on the class will give you the
> property object and not the docstring.

> I'm not sure of a way to resolve that.

Duh, someone just pointed out that you use your own descriptor instead
of a property:

class Basedoc:
    def __get__(self, obj, cls):
        return next(c.__doc__ for c in cls.__mro__[1:] if c.__doc__) or None

class C:
    __basedoc__ = Basedoc()

Inherit from the class or add it onto the class with a class decorator
or metaclass.


More information about the Python-ideas mailing list