diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 1d1a8bed..174eb371 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -337,7 +337,13 @@ class Evaluator(object): param_names = [] named_param_name = stmt.get_defined_names()[0] for typ in self.eval_call(call): - for param in typ.params: + if isinstance(typ, er.Class): + params = [] + for init_method in typ.py__getattribute__('__init__'): + params += init_method.params + else: + params = typ.params + for param in params: if unicode(param.get_name()) == unicode(named_param_name): param_names.append(param.get_name().names[-1]) return param_names diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 14d19b27..410280b7 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -390,6 +390,9 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)): def py__call__(self, evaluator, params): return [Instance(evaluator, self, params)] + def py__getattribute__(self, name): + return self._evaluator.find_types(self, name) + def scope_names_generator(self, position=None, add_class_vars=True): def in_iterable(name, iterable): """ checks if the name is in the variable 'iterable'. """ diff --git a/test/test_api/test_api_classes.py b/test/test_api/test_api_classes.py index 5eaa13c4..c197edd0 100644 --- a/test/test_api/test_api_classes.py +++ b/test/test_api/test_api_classes.py @@ -246,4 +246,6 @@ class TestGotoAssignments(TestCase): src = 'from threading import Thread; Thread(group=1)' n = names(src, references=True)[-1] assert n.name == 'group' - assert n.goto_assignments() + param_def = n.goto_assignments()[0] + assert param_def.name == 'group' + assert param_def.type == 'param'