我想改善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
装饰器的方法时,jedi找不到完成。 “正常”方法可以正常工作。
我是在这里以错误的方式使用绝地武士吗?或者这只是很难解决绝地武士的一种情况?
在此先感谢您的帮助!
PS:我也尝试将直到a = A()
的整个代码放入一个字符串中,并使用Script
而不是Interpreter
来完成。有趣的是,这样就可以成功地为@property
装饰方法找到正确的完成方式。