]> granicus.if.org Git - python/commitdiff
List class attrs in MRO order of defining class instead of by alphabetic
authorTim Peters <tim.peters@gmail.com>
Thu, 27 Sep 2001 03:29:51 +0000 (03:29 +0000)
committerTim Peters <tim.peters@gmail.com>
Thu, 27 Sep 2001 03:29:51 +0000 (03:29 +0000)
order of defining class's name.

Lib/pydoc.py

index 84ef4a5bf2835c31b28c038d8a9444a8e360c078..e5c350bf35f303fe88185a2ae8362930ea302f2b 100755 (executable)
@@ -621,7 +621,7 @@ TT { font-family: lucidatypewriter, lucida console, courier }
         hr = HorizontalRule()
 
         # List the mro, if non-trivial.
-        mro = inspect.getmro(object)
+        mro = list(inspect.getmro(object))
         if len(mro) > 2:
             hr.maybe()
             push('<dl><dt>Method resolution order:</dt>\n')
@@ -693,11 +693,11 @@ TT { font-family: lucidatypewriter, lucida console, courier }
             except TypeError:
                 pass
 
-        # Sort attrs by name of defining class.
-        attrs.sort(lambda t1, t2: cmp(t1[2].__name__, t2[2].__name__))
-
-        thisclass = object  # list attrs defined here first
         while attrs:
+            if mro:
+                thisclass = mro.pop(0)
+            else:
+                thisclass = attrs[0][2]
             attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
 
             if thisclass is object:
@@ -722,12 +722,7 @@ TT { font-family: lucidatypewriter, lucida console, courier }
             attrs = spilldata("Data and non-method functions %s" % tag, attrs,
                               lambda t: t[1] == 'data')
             assert attrs == []
-
-            # Split off the attributes inherited from the next class (note
-            # that inherited remains sorted by class name).
-            if inherited:
-                attrs = inherited
-                thisclass = attrs[0][2]
+            attrs = inherited
 
         contents = ''.join(contents)
 
@@ -1008,7 +1003,7 @@ class TextDoc(Doc):
         push = contents.append
 
         # List the mro, if non-trivial.
-        mro = inspect.getmro(object)
+        mro = list(inspect.getmro(object))
         if len(mro) > 2:
             push("Method resolution order:")
             for base in mro:
@@ -1072,12 +1067,11 @@ class TextDoc(Doc):
             return attrs
 
         attrs = inspect.classify_class_attrs(object)
-
-        # Sort attrs by name of defining class.
-        attrs.sort(lambda t1, t2: cmp(t1[2].__name__, t2[2].__name__))
-
-        thisclass = object  # list attrs defined here first
         while attrs:
+            if mro:
+                thisclass = mro.pop(0)
+            else:
+                thisclass = attrs[0][2]
             attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
 
             if thisclass is object:
@@ -1101,12 +1095,7 @@ class TextDoc(Doc):
             attrs = spilldata("Data and non-method functions %s:\n" % tag,
                               attrs, lambda t: t[1] == 'data')
             assert attrs == []
-
-            # Split off the attributes inherited from the next class (note
-            # that inherited remains sorted by class name).
-            if inherited:
-                attrs = inherited
-                thisclass = attrs[0][2]
+            attrs = inherited
 
         contents = '\n'.join(contents)
         if not contents: