-->

Komodo Python auto complete: type inference by var

2019-01-18 14:02发布

问题:

I'm using Komodo Edit for Python development, and I want to get the best out of the auto complete.

If I do this:

a = A()
a.

I can see a list of members of A.

But if I do this:

a = [A()]
b = a[0]
b.

It does not work. I want to be able to do this:

a = [A()]
b = a[0]
"""b

Type: A
"""
b.

So how can I tell the auto complete that b is of type A?

回答1:

This doesn't really answer your question, but with Wing IDE you can give hints to the type analyzer with assert isinstance(b, A). See here. I haven't found a way to do it with Komodo, though apparently it's possible when writing PHP or JavaScript.

Update:

I've found a way to trick Komodo into doing this:

if 0: b=A()

This works (at least on Komodo 5.2) and has no side effects, but is sure to confuse whoever reads your code.



回答2:

I don't think that you'll have much luck with this. The problem is that it's really quite difficult to statically infer the type of variables in Python except in the simplest of cases. Often the type isn't known until run-time and so auto completion isn't possible.

The IDE does some static analysis to work out the obvious and best guesses, but I'll bet it isn't even trying for elements in a container. Although we can work out that b is of type A even small variations to your code can make it unknowable, especially as it's in a mutable container.

Incidentally I've tried this on the full Komodo IDE and it's no better. I hear that Wing IDE has excellent code completion, but I wouldn't be sure it could do any better either.