From d0b7525822e34d8fb65d56cb0ae7902945cf242e Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 17 Jan 2020 09:51:23 -0800 Subject: [PATCH] POC: docstring inheritance --- pandas/core/base.py | 18 ++++++++++++++++++ pandas/tests/base/test_constructors.py | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/pandas/core/base.py b/pandas/core/base.py index 66d7cd59dcfa4..2db70ac29c78c 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -95,6 +95,24 @@ def _ensure_type(self: T, obj) -> T: assert isinstance(obj, type(self)), type(obj) return obj + @classmethod + def __init_subclass__(cls): + """Automatically inherit docstrings.""" + import types + + for name, attr in cls.__dict__.items(): + if isinstance(attr, types.FunctionType): + # TODO: property/cache_readonly? + if attr.__doc__ is None: + for parent in cls.__mro__: + if parent is cls: + continue + if hasattr(parent, name): + sup = getattr(parent, name) + if sup.__doc__ is not None: + attr.__doc__ = sup.__doc__ + break + class NoNewAttributesMixin: """Mixin which prevents adding new attributes. diff --git a/pandas/tests/base/test_constructors.py b/pandas/tests/base/test_constructors.py index 0b7274399aafc..67ce75e507f75 100644 --- a/pandas/tests/base/test_constructors.py +++ b/pandas/tests/base/test_constructors.py @@ -11,6 +11,7 @@ import pandas._testing as tm from pandas.core.accessor import PandasDelegate from pandas.core.base import NoNewAttributesMixin, PandasObject +from pandas.core.indexes.extension import ExtensionIndex class TestPandasDelegate: @@ -140,3 +141,7 @@ def test_constructor_datetime_outofbound(self, a, klass): # Forced conversion fails for all -> all cases raise error with pytest.raises(pd.errors.OutOfBoundsDatetime): klass(a, dtype="datetime64[ns]") + + +def test_docstring_inheritance(): + assert ExtensionIndex.dropna.__doc__ == Index.dropna.__doc__