methods inherited via more than one class are documented more than once
See for example http://twistedmatrix.com/documents/9.0.0/api/twisted.internet.interfaces.IReadWriteDescriptor.html

I have this vague memory that there is code that's supposed to suppress the repeated documentation, but it clearly isn't working.

---

Imported from Launchpad using lp2gh.
- date created: 2010-02-21T22:57:04Z
- owner: mwhudson
- the launchpad url was https://bugs.launchpad.net/bugs/525521

diff --git a/README.rst b/README.rst
index 9dbaebdf..f7db251b 100644
--- a/README.rst
+++ b/README.rst
@@ -72,6 +72,7 @@ What's New?
 
 in development
 ^^^^^^^^^^^^^^
+* Improve the name resolving algo such that it checks in super classes for inherited attributes.
 * C-modules wins over regular modules when there is a name clash.
 * Packages wins over modules when there is a name clash.
 * Fixed that modules were processed in a random order leading to several hard to reproduce bugs.
diff --git a/pydoctor/model.py b/pydoctor/model.py
index d2812cd4..2e7ceaa9 100644
--- a/pydoctor/model.py
+++ b/pydoctor/model.py
@@ -299,10 +299,17 @@ class Documentable:
             full_name = obj._localNameToFullName(p)
             if full_name == p and i != 0:
                 # The local name was not found.
-                # TODO: Instead of returning the input, _localNameToFullName()
-                #       should probably either return None or raise LookupError.
-                full_name = f'{obj.fullName()}.{p}'
-                break
+                # If we're looking at a class, we try our luck with the inherited members
+                if isinstance(obj, Class):
+                    inherited = obj.find(p)
+                    if inherited: 
+                        full_name = inherited.fullName()
+                if full_name == p:
+                    # We don't have a full name
+                    # TODO: Instead of returning the input, _localNameToFullName()
+                    #       should probably either return None or raise LookupError.
+                    full_name = f'{obj.fullName()}.{p}'
+                    break
             nxt = self.system.objForFullName(full_name)
             if nxt is None:
                 break
diff --git a/pydoctor/test/test_model.py b/pydoctor/test/test_model.py
index 936a4d5a..bde73eb4 100644
--- a/pydoctor/test/test_model.py
+++ b/pydoctor/test/test_model.py
@@ -346,4 +346,18 @@ def test_c_module_python_module_name_clash(capsys:CapSys) -> None:
 
     finally:
         # cleanup
-        subprocess.getoutput(f'rm -f {package_path}/*.so')
\ No newline at end of file
+        subprocess.getoutput(f'rm -f {package_path}/*.so')
+
+def test_resolve_name_subclass(capsys:CapSys) -> None:
+    """
+    C{Model.resolveName} knows about single inheritance.
+    """
+    m = fromText(
+        """
+        class B:
+            v=1
+        class C(B):
+            pass
+        """
+    )
+    assert m.resolveName('C.v') == m.contents['B'].contents['v']
['pydoctor/test/test_model.py', 'README.rst', 'pydoctor/model.py']