summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-09-26 21:31:51 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-09-26 21:31:51 (GMT)
commitc86f6ca2b6d51040021b2a4bbd609b4445e321ff (patch)
tree85adf64f969edf0ed5a023163f1335251dfbb753 /Lib
parent39cd603fc884b60b8c7a6dad0346f819ea181f4a (diff)
downloadcpython-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')
-rwxr-xr-xLib/pydoc.py23
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>&nbsp;</tt>' % doc or '&nbsp;'
+
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):