mirror of
https://github.com/python/cpython.git
synced 2025-09-14 20:56:06 +00:00
Handle old-style instances more gracefully (display documentation on
the relevant class instead of documentation on <type 'instance'>).
This commit is contained in:
parent
0567ba20f3
commit
8ef1cf30b7
1 changed files with 13 additions and 6 deletions
19
Lib/pydoc.py
19
Lib/pydoc.py
|
@ -1448,6 +1448,9 @@ def locate(path, forceload=0):
|
|||
text = TextDoc()
|
||||
html = HTMLDoc()
|
||||
|
||||
class _OldStyleClass: pass
|
||||
_OLD_INSTANCE_TYPE = type(_OldStyleClass())
|
||||
|
||||
def resolve(thing, forceload=0):
|
||||
"""Given an object or a path to an object, get the object and its name."""
|
||||
if isinstance(thing, str):
|
||||
|
@ -1468,12 +1471,16 @@ def doc(thing, title='Python Library Documentation: %s', forceload=0):
|
|||
desc += ' in ' + name[:name.rfind('.')]
|
||||
elif module and module is not object:
|
||||
desc += ' in module ' + module.__name__
|
||||
if not (inspect.ismodule(object) or
|
||||
inspect.isclass(object) or
|
||||
inspect.isroutine(object) or
|
||||
inspect.isgetsetdescriptor(object) or
|
||||
inspect.ismemberdescriptor(object) or
|
||||
isinstance(object, property)):
|
||||
if type(object) is _OLD_INSTANCE_TYPE:
|
||||
# If the passed object is an instance of an old-style class,
|
||||
# document its available methods instead of its value.
|
||||
object = object.__class__
|
||||
elif not (inspect.ismodule(object) or
|
||||
inspect.isclass(object) or
|
||||
inspect.isroutine(object) or
|
||||
inspect.isgetsetdescriptor(object) or
|
||||
inspect.ismemberdescriptor(object) or
|
||||
isinstance(object, property)):
|
||||
# If the passed object is a piece of data or an instance,
|
||||
# document its available methods instead of its value.
|
||||
object = type(object)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue