summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--astroid/bases.py2
-rw-r--r--astroid/tests/unittest_inference.py16
2 files changed, 17 insertions, 1 deletions
diff --git a/astroid/bases.py b/astroid/bases.py
index 72fd0d8..c2ea55e 100644
--- a/astroid/bases.py
+++ b/astroid/bases.py
@@ -215,7 +215,7 @@ class Instance(Proxy):
"""infer what a class instance is returning when called"""
inferred = False
for node in self._proxied.igetattr('__call__', context):
- if node is util.YES:
+ if node is util.YES or not node.callable():
continue
for res in node.infer_call_result(caller, context):
inferred = True
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 644e282..841d9ff 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -2995,6 +2995,22 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertIsInstance(inferred, Instance)
self.assertEqual(inferred.name, 'Sub')
+ def test_infer_call_result_invalid_dunder_call_on_instance(self):
+ ast_nodes = test_utils.extract_node('''
+ class A:
+ __call__ = 42
+ class B:
+ __call__ = A()
+ class C:
+ __call = None
+ A() #@
+ B() #@
+ C() #@
+ ''')
+ for node in ast_nodes:
+ inferred = next(node.infer())
+ self.assertRaises(InferenceError, next, inferred.infer_call_result(node))
+
class GetattrTest(unittest.TestCase):