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).
This commit is contained in:
parent
39cd603fc8
commit
c86f6ca2b6
23
Lib/pydoc.py
23
Lib/pydoc.py
|
@ -624,6 +624,16 @@ TT { font-family: lucidatypewriter, lucida console, courier }
|
||||||
self.needone = 1
|
self.needone = 1
|
||||||
hr = HorizontalRule()
|
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):
|
def spill(msg, attrs, predicate):
|
||||||
ok, attrs = _split_list(attrs, predicate)
|
ok, attrs = _split_list(attrs, predicate)
|
||||||
if ok:
|
if ok:
|
||||||
|
@ -738,6 +748,7 @@ TT { font-family: lucidatypewriter, lucida console, courier }
|
||||||
title = title + '(%s)' % join(parents, ', ')
|
title = title + '(%s)' % join(parents, ', ')
|
||||||
doc = self.markup(getdoc(object), self.preformat, funcs, classes, mdict)
|
doc = self.markup(getdoc(object), self.preformat, funcs, classes, mdict)
|
||||||
doc = doc and '<tt>%s<br> </tt>' % doc or ' '
|
doc = doc and '<tt>%s<br> </tt>' % doc or ' '
|
||||||
|
|
||||||
return self.section(title, '#000000', '#ffc8d8', contents, 5, doc)
|
return self.section(title, '#000000', '#ffc8d8', contents, 5, doc)
|
||||||
|
|
||||||
def formatvalue(self, object):
|
def formatvalue(self, object):
|
||||||
|
@ -985,12 +996,14 @@ class TextDoc(Doc):
|
||||||
name = name or realname
|
name = name or realname
|
||||||
bases = object.__bases__
|
bases = object.__bases__
|
||||||
|
|
||||||
|
def makename(c, m=object.__module__):
|
||||||
|
return classname(c, m)
|
||||||
|
|
||||||
if name == realname:
|
if name == realname:
|
||||||
title = 'class ' + self.bold(realname)
|
title = 'class ' + self.bold(realname)
|
||||||
else:
|
else:
|
||||||
title = self.bold(name) + ' = class ' + realname
|
title = self.bold(name) + ' = class ' + realname
|
||||||
if bases:
|
if bases:
|
||||||
def makename(c, m=object.__module__): return classname(c, m)
|
|
||||||
parents = map(makename, bases)
|
parents = map(makename, bases)
|
||||||
title = title + '(%s)' % join(parents, ', ')
|
title = title + '(%s)' % join(parents, ', ')
|
||||||
|
|
||||||
|
@ -998,6 +1011,14 @@ class TextDoc(Doc):
|
||||||
contents = doc and [doc + '\n'] or []
|
contents = doc and [doc + '\n'] or []
|
||||||
push = contents.append
|
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.
|
# Cute little class to pump out a horizontal rule between sections.
|
||||||
class HorizontalRule:
|
class HorizontalRule:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
Loading…
Reference in New Issue