diff --git a/Lib/pydoc.py b/Lib/pydoc.py --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -867,8 +867,11 @@ object.__module__) tag += ':
\n' - # Sort attrs by name. - attrs.sort(key=lambda t: t[0]) + # Sort by _fields first and then alphabetically + fields = getattr(object, '_fields', []) + field_order = {name : i-len(fields) for (i, name) in enumerate(fields)} + keyfunc = lambda attr: (field_order.get(attr[0], 0), attr[0]) + attrs.sort(key=keyfunc) # Pump out the attrs, segregated by kind. attrs = spill('Methods %s' % tag, attrs, @@ -1286,8 +1289,12 @@ else: tag = "inherited from %s" % classname(thisclass, object.__module__) - # Sort attrs by name. - attrs.sort() + + # Sort by _fields first and then alphabetically + fields = getattr(object, '_fields', []) + field_order = {name : i-len(fields) for (i, name) in enumerate(fields)} + keyfunc = lambda attr: (field_order.get(attr[0], 0), attr[0]) + attrs.sort(key=keyfunc) # Pump out the attrs, segregated by kind. attrs = spill("Methods %s:\n" % tag, attrs,