Я тестировал множество Python IDE на предмет их возможностей автозавершения кода . Существует ли такой, который может выполнять завершение кода в следующем случае:
def foo(x):
print x.read() // remove this line, and type in "print x."
def main():
n = open("c:\\python27\\test.py");
foo(n)
IDE должна выяснить, что foo вызывается где-то в текущем модуле с параметром, который был возвращаемым значением из вызова open (), который он должен был бы accept - это вызов file.open
и, таким образом, возвращает файловый объект. Таким образом, x.
, за которым следует Ctrl + Space, вызовет завершение кода и покажет, что x, как файловый объект, может поддерживать любой метод файлового объекта, включая read ()
.
Я обнаружил, что PyScripter, например, может сделать это:
n = open("c:\\python27\\test.py");
n. // hit <ctrl+space> after n.
Вышеупомянутый сценарий завершения кода работает, потому что PyScripter выполняет некоторую специальную логику завершения кода, чтобы определить, что n является файловым объектом, но, похоже, нет способ определения типов объектов или доступных методов на основе статического анализа, который будет определять типы параметров.
Во-вторых, если ничего подобного нет в Python 2.x, то в Python 3.x теперь, когда есть подсказки статического типа, поддерживает ли их какая-либо среда IDE?
def foo(x:'file'):
print x.read() // remove this line, and type in "print x." and hit ctrl+space