Override a method but inherit the docstring
Peter Otten
__peter__ at web.de
Fri Jul 17 02:58:40 EDT 2009
Ben Finney wrote:
> Howdy all,
>
> The following is a common idiom::
>
> class FooGonk(object):
> def frobnicate(self):
> """ Frobnicate this gonk. """
> basic_implementation(self.wobble)
>
> class BarGonk(FooGonk):
> def frobnicate(self):
> special_implementation(self.warble)
>
> The docstring for ‘FooGonk.frobnicate’ is, intentionally, perfectly
> applicable to the ‘BarGonk.frobnicate’ method also. Yet in overriding
> the method, the original docstring is not associated with it.
>
> Ideally there would be a way to specify that the docstring should be
> inherited. The best I can come up with is::
>
> class BarGonk(FooGonk):
> def frobnicate(self):
> special_implementation(self.warble)
> frobnicate.__doc__ = FooGonk.frobnicate.__doc__
>
> but that violates DRY (the association between BarGonk and FooGonk is
> being repeated), puts the docstring assignment awkwardly after the end
> of the method instead of at the beginning where docstrings normally go,
> and reads poorly besides.
>
> What is the most Pythonic, DRY-adherent, and preferably least-ugly
> approach to override a method, but have the same docstring on both
> methods?
Just thinking aloud: Write a patch for pydoc that looks up the base-class
documentation.
B.f.__doc__ will continue to return None, but
help(B.f) will show something like
No documentation available for B.f.
Help for A.f:
yadda yadda
Of course that might be misleading when A.f and B.f are up to something
completely different...
Peter
More information about the Python-list
mailing list