Issue 902628: doctest confused by super-instances in class-dicts (original) (raw)

In Python 2.3.3, doctest chokes on classes which contain an attribute of type super:

Traceback (most recent call last): File "/ttt/private/tanzer/temp/confuse_doctest.py", line 14, in ? import doctest, confuse_doctest File "/Node/tttprime/ttt/private/tanzer/temp/confuse_doctest.py", line 15, in ? doctest.testmod(confuse_doctest) File "/usr/lib/python2.3/doctest.py", line 1148, in testmod f, t = tester.rundict(m.dict, name, m) File "/usr/lib/python2.3/doctest.py", line 908, in rundict f2, t2 = self.runone(value, name + "." + thisname) File "/usr/lib/python2.3/doctest.py", line 1069, in runone return self.rundoc(target, name) File "/usr/lib/python2.3/doctest.py", line 828, in rundoc f2, t2 = self.run__test(d, name) File "/usr/lib/python2.3/doctest.py", line 937, in run__test raise TypeError("Tester.run__test__: values in " TypeError: Tester.run__test__: values in dict must be strings, functions, methods, or classes; <super: <class 'A'>, NULL>

A simple example triggering the bug is attached.

Python 2.3.3 (#2, Jan 13 2004, 00:47:05) [GCC 3.3.3 20040110 (prerelease) (Debian)] on linux2

Logged In: YES user_id=195958

The problem is that inspect.get_class_attrs()'s "method" classification is a bit hetergeneous: it contains methods, and any method descriptors except classmethod and staticmethod. The proposed patch will fix behavior for super(), but not for any other method descriptors. So perhaps it would be better to explicitly test "_isfunction(v) or _ismethod(v)" rather than "not isinstance(value, super)".