diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-09-26 21:31:51 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-09-26 21:31:51 (GMT) |
commit | c86f6ca2b6d51040021b2a4bbd609b4445e321ff (patch) | |
tree | 85adf64f969edf0ed5a023163f1335251dfbb753 /Lib/pydoc.py | |
parent | 39cd603fc884b60b8c7a6dad0346f819ea181f4a (diff) | |
download | cpython-c86f6ca2b6d51040021b2a4bbd609b4445e321ff.zip cpython-c86f6ca2b6d51040021b2a4bbd609b4445e321ff.tar.gz cpython-c86f6ca2b6d51040021b2a4bbd609b4445e321ff.tar.bz2 |
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).
Diffstat (limited to 'Lib/pydoc.py')
-rwxr-xr-x | Lib/pydoc.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py index a6f026b..a99fdb4 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('<dl><dt>Method resolution order:</dt>\n') + for base in mro: + push('<dd>%s</dd>\n' % self.classlink(base, + object.__module__)) + push('</dl>\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 '<tt>%s<br> </tt>' % 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): |