Override a method but inherit the docstring

Ben Finney ben+python at benfinney.id.au
Thu Jul 16 22:58:48 EDT 2009

Paul McGuire <ptmcg at austin.rr.com> writes:

> Two ideas come to mind, the decorator way and the metaclass way. I am
> not a guru at either, but these two examples work:

I think the decorator idea is most attractive to me, since it can be
applied per method.

> # the decorator way
> def inherit_docstring_from(cls):
>     def docstring_inheriting_decorator(fn):
>         fn.__doc__ = getattr(cls,fn.__name__).__doc__
>         return fn
>     return docstring_inheriting_decorator

That works, thank you.

> Using a decorator in this manner requires repeating the super class
> name.  Perhaps there is a way to get the bases of BarGonk, but I don't
> think so, because at the time that the decorator is called, BarGonk is
> not yet fully defined.

Yes, I tried a few different ways, but within the decorator it seems the
function object is quite unaware of what class it is destined for.

 \     “We are human only to the extent that our ideas remain humane.” |
  `\                          —_Breakfast of Champions_, Kurt Vonnegut |
_o__)                                                                  |
Ben Finney

More information about the Python-list mailing list