是否可以让 Python IDE 为动态生成的类属性提供自动完成功能?

Cia*_*lsh 6 python attributes autocomplete

是否有任何技巧可以让 IDE 为动态生成的类属性提供代码完成?例如


class A:
    
    def __init__(self):
        setattr(self, "a", 5)

Run Code Online (Sandbox Code Playgroud)

此代码将A被调用的类属性设置a为的值5。但是 IDE 不知道a,因此您不会获得它的代码完成。我读过__dir__方法可以被挂钩,但该答案中提出的建议对我不起作用。有人有任何想法吗?

igr*_*nis 6

相信你会在这里找到答案。简而言之,Pycharm 目前不(并且可能在可观察的未来不会)支持动态属性。那是因为它静态地分析代码,并且无法“看到”一个类可能具有哪些属性。另一方面,当您在(比如)iPython 中运行代码时,一旦创建了此类的实例,编辑器就可以获取驻留在内存中的特定实例的属性,从而在自动完成中显示它们。在这种情况下有__dir__帮助。我认为其他 IDE 也是如此。

所以如果你真的需要自动完成功能,你可能想尝试使用 Jupyter notebook。尽管如此,您仍必须在获得自动完成功能之前实例化您的变量。

另一种可能的解决方案是利用 IDE 支持的.pyi文件(Python 接口文件存根)。您可以在代码中添加一个小片段,用动态属性实例化类,并记下类接口文件 ( .pyi)。然后 IDE 将使用它进行自动完成。显然,这个解决方案会有“一次运行延迟”,但是在 PyCharm 中,您只需单击类名附近的星号即可切换到此类文件,您可以在发生大量更改时手动更新它。