diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-09-20 05:47:55 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-09-20 05:47:55 (GMT) |
commit | f1d90b965e50c17d09535c1f740942dde3d8a294 (patch) | |
tree | 2996aa9005fb3a0728a2dcd0087eba187e34aabc | |
parent | c9ed5dc81c143b70203905fe89ece96d0dcea1e3 (diff) | |
download | cpython-f1d90b965e50c17d09535c1f740942dde3d8a294.zip cpython-f1d90b965e50c17d09535c1f740942dde3d8a294.tar.gz cpython-f1d90b965e50c17d09535c1f740942dde3d8a294.tar.bz2 |
Ensure that isfunction(obj) and (the new) ismethoddescriptor(obj) never
both return true. This restores pydoc's ability to deduce argument lists
for functions and methods coded in Python.
-rw-r--r-- | Lib/inspect.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index c4c15f5..1102c3b 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -58,20 +58,23 @@ def ismethod(object): return isinstance(object, types.MethodType) def ismethoddescriptor(object): - """Return true if the object is a method descriptor, and ismethod false. + """Return true if the object is a method descriptor. + + But not if ismethod() or isclass() or isfunction() are true. This is new in Python 2.2, and, for example, is true of int.__add__. An object passing this test has a __get__ attribute but not a __set__ attribute, but beyond that the set of attributes varies. __name__ is usually sensible, and __doc__ often is. - Methods implemented via descriptors that also pass the ismethod() test - return false from the ismethoddescriptor() test, simply because - ismethod() is more informative -- you can, e.g., count on having the - im_func attribute (etc) when an object passes the latter.""" + Methods implemented via descriptors that also pass one of the other + tests return false from the ismethoddescriptor() test, simply because + the other tests promise more -- you can, e.g., count on having the + im_func attribute (etc) when an object passes ismethod().""" return (hasattr(object, "__get__") and not hasattr(object, "__set__") # else it's a data descriptor and not ismethod(object) # mutual exclusion + and not isfunction(object) and not isclass(object)) def isfunction(object): |