summaryrefslogtreecommitdiffstats
path: root/Lib/rlcompleter.py
diff options
context:
space:
mode:
authorJack DeVries <58614260+jdevries3133@users.noreply.github.com>2021-07-29 11:40:29 (GMT)
committerGitHub <noreply@github.com>2021-07-29 11:40:29 (GMT)
commit50de8f74f8e92b20e76438c22b6a8f91afd6df75 (patch)
tree6f24738fae18584f424020f7306a59a9261740bb /Lib/rlcompleter.py
parente5c8ddb1714fb51ab1defa24352c98e0f01205dc (diff)
downloadcpython-50de8f74f8e92b20e76438c22b6a8f91afd6df75.zip
cpython-50de8f74f8e92b20e76438c22b6a8f91afd6df75.tar.gz
cpython-50de8f74f8e92b20e76438c22b6a8f91afd6df75.tar.bz2
bpo-44752: Make rlcompleter not call `@property` methods (GH-27401)
* rlcompleter was calling these methods to identify whether to add parenthesis to the completion, based on if the attribute is callable. * for property objects, completion with parenthesis are never desirable. * property methods with print statements behaved very strangely, which was especially unfriendly to language newcomers. <tab> could suddenly produce output unexpectedly.
Diffstat (limited to 'Lib/rlcompleter.py')
-rw-r--r--Lib/rlcompleter.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index c06388e..34b2599 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -176,6 +176,16 @@ class Completer:
if (word[:n] == attr and
not (noprefix and word[:n+1] == noprefix)):
match = "%s.%s" % (expr, word)
+ if isinstance(getattr(type(thisobject), word, None),
+ property):
+ # bpo-44752: thisobject.word is a method decorated by
+ # `@property`. What follows applies a postfix if
+ # thisobject.word is callable, but know we know that
+ # this is not callable (because it is a property).
+ # Also, getattr(thisobject, word) will evaluate the
+ # property method, which is not desirable.
+ matches.append(match)
+ continue
try:
val = getattr(thisobject, word)
except Exception: