diff --git a/CHANGES b/CHANGES index 6125b83a1da..7241391ae02 100644 --- a/CHANGES +++ b/CHANGES @@ -19,6 +19,7 @@ Bugs fixed * #8559: autodoc: AttributeError is raised when using forward-reference type annotations * #8568: autodoc: TypeError is raised on checking slots attribute +* #8567: autodoc: Instance attributes are incorrectly added to Parent class Testing -------- diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index 4bf97cc851a..c12562efdd7 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -1856,13 +1856,14 @@ def can_document_member(cls, member: Any, membername: str, isattr: bool, parent: def update_annotations(self, parent: Any) -> None: """Update __annotations__ to support type_comment and so on.""" try: - annotations = inspect.getannotations(parent) + annotations = dict(inspect.getannotations(parent)) + parent.__annotations__ = annotations analyzer = ModuleAnalyzer.for_module(self.modname) analyzer.analyze() for (classname, attrname), annotation in analyzer.annotations.items(): if classname == '' and attrname not in annotations: - annotations[attrname] = annotation # type: ignore + annotations[attrname] = annotation except AttributeError: pass @@ -2292,7 +2293,8 @@ def isinstanceattribute(self) -> bool: def update_annotations(self, parent: Any) -> None: """Update __annotations__ to support type_comment and so on.""" try: - annotations = inspect.getannotations(parent) + annotations = dict(inspect.getannotations(parent)) + parent.__annotations__ = annotations for cls in inspect.getmro(parent): try: @@ -2303,7 +2305,7 @@ def update_annotations(self, parent: Any) -> None: analyzer.analyze() for (classname, attrname), annotation in analyzer.annotations.items(): if classname == qualname and attrname not in annotations: - annotations[attrname] = annotation # type: ignore + annotations[attrname] = annotation except (AttributeError, PycodeError): pass except AttributeError: