diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index c042aa71a7f..ac1b5cec6f6 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -678,9 +678,23 @@ def is_filtered_inherited_member(name: str, obj: Any) -> bool: try: membername = obj.__name__ member = obj.object - # if isattr is True, the member is documented as an attribute - isattr = member is INSTANCEATTR or (namespace, membername) in attr_docs + except AttributeError: + if isinstance(obj, ObjectMember): + raise + # To be removed, retained for compatibility. + # See https://github.com/sphinx-doc/sphinx/issues/11631 + membername, member = obj + warnings.warn( + 'Returning tuples of (name, object) as ' + 'the second return value from get_object_members() is deprecated. ' + 'Return ObjectMember(name, object) instances instead.', + RemovedInSphinx80Warning, stacklevel=2, + ) + + # if isattr is True, the member is documented as an attribute + isattr = member is INSTANCEATTR or (namespace, membername) in attr_docs + try: doc = getdoc(member, self.get_attr, self.config.autodoc_inherit_docstrings, self.object, membername) if not isinstance(doc, str):