From c86f6ca2b6d51040021b2a4bbd609b4445e321ff Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Wed, 26 Sep 2001 21:31:51 +0000 Subject: [PATCH] Display a class's method resolution order, if it's non-trivial. "Trivial" here means it has no more than one base class to rummage through (in which cases there's no potential confusion about resolution order). --- Lib/pydoc.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index a6f026bcb23..a99fdb48ffe 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -624,6 +624,16 @@ TT { font-family: lucidatypewriter, lucida console, courier } self.needone = 1 hr = HorizontalRule() + # List the mro, if non-trivial. + mro = inspect.getmro(object) + if len(mro) > 2: + hr.maybe() + push('
Method resolution order:
\n') + for base in mro: + push('
%s
\n' % self.classlink(base, + object.__module__)) + push('
\n') + def spill(msg, attrs, predicate): ok, attrs = _split_list(attrs, predicate) if ok: @@ -738,6 +748,7 @@ TT { font-family: lucidatypewriter, lucida console, courier } title = title + '(%s)' % join(parents, ', ') doc = self.markup(getdoc(object), self.preformat, funcs, classes, mdict) doc = doc and '%s
 
' % doc or ' ' + return self.section(title, '#000000', '#ffc8d8', contents, 5, doc) def formatvalue(self, object): @@ -985,12 +996,14 @@ class TextDoc(Doc): name = name or realname bases = object.__bases__ + def makename(c, m=object.__module__): + return classname(c, m) + if name == realname: title = 'class ' + self.bold(realname) else: title = self.bold(name) + ' = class ' + realname if bases: - def makename(c, m=object.__module__): return classname(c, m) parents = map(makename, bases) title = title + '(%s)' % join(parents, ', ') @@ -998,6 +1011,14 @@ class TextDoc(Doc): contents = doc and [doc + '\n'] or [] push = contents.append + # List the mro, if non-trivial. + mro = inspect.getmro(object) + if len(mro) > 2: + push("Method resolution order:") + for base in mro: + push(' ' + makename(base)) + push('') + # Cute little class to pump out a horizontal rule between sections. class HorizontalRule: def __init__(self):