If I make a class B, and add staticmethod(A) as an attribute when B is another class, help(B) breaks. The issue appears with Python 2.6.6, trunk, 3.1.3c1, and py3k SVN.
Python 2.7 (trunk:86836, Nov 27 2010, 18:23:07)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A(object):
... pass
...
>>> class B(object):
... attr = staticmethod(A)
...
>>> help(B)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/milko/Среда/Python/trunk/Lib/site.py", line 453, in __call__
return pydoc.help(*args, **kwds)
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 1720, in __call__
self.help(request)
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 1767, in help
else: doc(request, 'Help on %s:')
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 1508, in doc
pager(render_doc(thing, title, forceload))
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 1503, in render_doc
return title % desc + '\n\n' + text.document(object, name)
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 327, in document
if inspect.isclass(object): return self.docclass(*args)
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 1216, in docclass
lambda t: t[1] == 'static method')
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 1162, in spill
name, mod, object))
File "/home/milko/Среда/Python/trunk/Lib/pydoc.py", line 327, in document
if inspect.isclass(object): return self.docclass(*args)
TypeError: docclass() takes at most 4 arguments (5 given)
Python 3.2a4+ (py3k:86836, Nov 27 2010, 18:35:01)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
... pass
...
>>> class B:
... attr = staticmethod(A)
...
>>> help(B)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/milko/Среда/Python/py3k/Lib/site.py", line 447, in __call__
return pydoc.help(*args, **kwds)
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 1713, in __call__
self.help(request)
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 1760, in help
else: doc(request, 'Help on %s:')
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 1504, in doc
pager(render_doc(thing, title, forceload))
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 1499, in render_doc
return title % desc + '\n\n' + text.document(object, name)
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 319, in document
if inspect.isclass(object): return self.docclass(*args)
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 1214, in docclass
lambda t: t[1] == 'static method')
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 1159, in spill
name, mod, object))
File "/home/milko/Среда/Python/py3k/Lib/pydoc.py", line 319, in document
if inspect.isclass(object): return self.docclass(*args)
TypeError: docclass() takes at most 4 positional arguments (5 given)
|
The fix is simple:
--- Lib/pydoc.py (revision 86824)
+++ Lib/pydoc.py (working copy)
@@ -1110,7 +1110,7 @@
result = result + self.section('FILE', file)
return result
- def docclass(self, object, name=None, mod=None):
+ def docclass(self, object, name=None, mod=None, *ignored):
"""Produce text documentation for a given class object."""
realname = object.__name__
name = name or realname
I think this is the right thing to do because HTMLDoc.docclass() has the following signature.
def docclass(self, object, name=None, mod=None, funcs={}, classes={},
*ignored):
|