1

通过在命令行中将对象暴露给 python 程序,我得到了大量的实用程序。例如:

myprog.py  obj1.obj2.method

让我执行 obj1.obj2.method(),然后

myprog.py  obj1.<TAB>
myprog.py  obj1.obj2<TAB>

让我看看有什么可用的。惊人的!但是,我无法说服 jedi 返回自动完成结果列表(或字典)。我希望这可能适用于短名单:

class X:
    pass

x = X()
x2 = X()
x2.y = 456
x.z = [x2]

# Want to get x.z[0].y in the results
prefix = "x.z[0]."

import jedi
# Tell jedi about list elements?
script = jedi.Interpreter(prefix, [{"x.z[0].z": x.z[0].z}])

for c in script.completions():
    print c
sys.exit()
4

1 回答 1

2

如果有的话,这应该工作:

>>> script = jedi.Interpreter(prefix, [{"x": x}])
>>> script.completions()

但是目前它返回一个空列表。我认为向 Jedi 问题跟踪器添加一个问题是值得的,因为这是绝对可以做到的。

如果我没记错 Jedi 代码,Jedi 会尝试getattr在某些情况下不调用(例如类查找),但这很容易改变,因为它是:

  1. 无论如何都不一致,Jedi 会调用getattr不复杂的对象,例如x.y.
  2. 标准库自动完成也调用getattr.

如果需要,只需将问题添加到 Jedi 问题跟踪器即可。

于 2015-05-06T09:34:44.680 回答