我想改进 python 控制台中的自动完成功能,这是我正在从事的项目的一部分。虽然 jedi 通常对此非常有效,但有一种特殊情况无法找到任何完成建议:使用@property
装饰器定义为方法的类的属性。以下示例应解释我的问题:
import jedi
class B:
def __init(self):
pass
def see_me(self):
pass
class A:
def __init__(self):
pass
@property
def b(self):
return B()
def get_b(self):
return B()
a = A()
script = jedi.Interpreter('a.b.', [locals()])
comps = script.completions()
print('Interpreter completion (property): ', comps)
script = jedi.Interpreter('a.get_b().', [locals()])
comps = script.completions()
print('Interpreter completion (method): ', comps)
执行脚本返回:
Interpreter completion (property): []
Interpreter completion (method): [<Completion: see_me>, ...]
当@property
调用带有装饰器的方法时,绝地没有找到完成。“正常”方法工作得很好。我在这里以错误的方式使用绝地,还是这只是绝地难以解决的案例之一?
在此先感谢您的帮助!
PS:我还尝试将整个代码直到a = A()
放入一个字符串中,并使用它Script
来代替Interpreter
完成。有趣的是,这也成功地为@property
装饰方法找到了正确的完成。