2

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

4

0 回答 0