class 实例的方法参数自动完成

Method parameter auto completion for a class instance

我正在尝试自动完成 class 实例的方法参数名称,但不太明白。举个例子 class:

class Abc:
    def meth(param):
        pass

如果我输入 Abc.meth(p 并按 Tab 我会看到预期的完成 param=:

但是,如果我尝试对 class Abc().meth(p 的实例执行相同的操作,我在完成结果中看不到 param

我在 JupyterLab 和 VS Code 中看到了相同的行为,事实上这适用于其他包的实例,例如 scikit learn,我认为我缺少一些东西。

如何为我的 Abc() class 的实例获取方法参数完成,类似于上面的 LinearRegression class?

根据对 JupyterLab 版本 3.2.9 的实验,这似乎是因为自动完成尝试考虑 selfcls 等隐式参数。添加一个 self 参数应该可以解决大部分问题。

class Abc:
    def meth(arg1, arg2, arg3):
        pass

这些是我为上面的 class 提供的完成选项:

Decorator Abc.meth Abc().meth
None arg1, arg2, arg3 arg2, arg3
@staticmethod arg1, arg2, arg3 arg2, arg3
@classmethod arg2, arg3 arg3

标准行为很好,但是 Abc().meth 的结果对于两个装饰器都是错误的。正如 staticmethod and classmethod 的文档中所述:

method can be called either on the class (such as C.f()) or on an instance (such as C().f())

所以当使用装饰器时,两列应该是相同的,但它总是从 Abc().meth 中省略一个参数,大概是 self。即使在使用 @classmethodAbc.meth 正确处理了 cls,它最终还是省略了 Abc().meth 中的两个参数。


使用 Visual Studio 代码 1.67.1 进行的测试为所有情况提供了正确的自动完成选项。因此,您遇到的缺失建议是预期的行为,因为 param 取代了 self 并且没有其他参数。