diff options
| author | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2015-07-03 12:41:52 +0300 |
|---|---|---|
| committer | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2015-07-03 12:41:52 +0300 |
| commit | 24209b633bc0465e5a078ef626711547211ca820 (patch) | |
| tree | 18fd35e8f7ac9ef88075655e60d61e348325e214 | |
| parent | 40cff07aad309c94aa62e9eb26347e24294732b6 (diff) | |
| download | astroid-24209b633bc0465e5a078ef626711547211ca820.tar.gz | |
Infer the unary method retrieved from classes.
| -rw-r--r-- | astroid/inference.py | 5 | ||||
| -rw-r--r-- | astroid/tests/unittest_inference.py | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/astroid/inference.py b/astroid/inference.py index fda5f2e..05428de 100644 --- a/astroid/inference.py +++ b/astroid/inference.py @@ -397,8 +397,9 @@ def _infer_unaryop(self, context=None): try: meth = operand.getattr(meth, context=context)[0] - result = next(meth.infer_call_result(self, context=context), - None) + inferred = next(meth.infer(context=context)) + call_results = inferred.infer_call_result(self, context=context) + result = next(call_results, None) if result is None: # Failed to infer, return the same type. yield operand diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py index 87e6993..eba665c 100644 --- a/astroid/tests/unittest_inference.py +++ b/astroid/tests/unittest_inference.py @@ -2658,6 +2658,19 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase): self.assertIsInstance(inferred, nodes.Const) self.assertEqual(inferred.value, "lala") + def test_unary_op_assignment(self): + ast_node = test_utils.extract_node(''' + class A(object): pass + def pos(self): + return 42 + A.__pos__ = pos + f = A() + +f #@ + ''') + inferred = next(ast_node.infer()) + self.assertIsInstance(inferred, nodes.Const) + self.assertEqual(inferred.value, 42) + class GetattrTest(unittest.TestCase): |
