diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 10e8411d..b6380642 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -331,12 +331,11 @@ class Evaluator(object): return list(obj.execute_function(self, params)) elif obj.isinstance(er.Class): # There maybe executions of executions. - return [er.Instance(self, obj, params)] + return obj.py__call__(params) else: stmts = [] if obj.isinstance(er.Function): - stmts = er.FunctionExecution(self, obj, params) \ - .get_return_types(evaluate_generator) + return obj.py__call__(params, evaluate_generator) else: if hasattr(obj, 'execute_subscope_by_name'): try: diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index e491d4dc..ec69b580 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -26,6 +26,7 @@ from jedi.evaluate import iterable from jedi.evaluate import docstrings from jedi.evaluate import helpers from jedi.evaluate import param +from jedi.evaluate import imports class Executable(pr.IsScope): @@ -246,6 +247,11 @@ class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)): def is_callable(self): return self.var.is_callable() + def py__call__(self, params, evaluate_generator=False): + stmts = FunctionExecution(self._evaluator, self, params) \ + .get_return_types(evaluate_generator) + return imports.follow_imports(self._evaluator, stmts) + def __repr__(self): return "<%s of %s>" % (type(self).__name__, self.var) @@ -292,6 +298,9 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)): supers += self._evaluator.find_types(compiled.builtin, 'object') return supers + def py__call__(self, params): + return [Instance(self._evaluator, self, params)] + @memoize_default(default=()) def instance_names(self): def in_iterable(name, iterable): @@ -412,6 +421,11 @@ class Function(use_metaclass(CachedMetaClass, pr.IsScope)): def is_callable(self): return True + def py__call__(self, params, evaluate_generator=False): + stmts = FunctionExecution(self._evaluator, self, params) \ + .get_return_types(evaluate_generator) + return imports.follow_imports(self._evaluator, stmts) + def __getattr__(self, name): return getattr(self.base_func, name)