绝地翻译器完成属性失败

时间:2018-11-21 00:33:01

标签: python-jedi

我想改善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装饰方法找到正确的完成方式。

0 个答案:

没有答案