2

我在 neovim 中使用 CoC 的 coc-pyright 扩展。

在某些情况下,我们在类中有一个不需要访问自身变量的实例方法。例如,我可能在__init__方法中有一些变量不需要在类中的其他任何地方访问。作为一个玩具示例,请考虑,

class Example:
    def __init__(self, some_var):
        self.another_var = self.process_var(some_var)

    def process_var(self, some_var):
        return some_var*2

现在,这里 pyright 警告我self未访问。有没有办法让 Pyright 在这种情况下不发出警告?

PS 被传递的变量是一个特定于实例的变量。所以self需要使它成为一个实例变量,对吧?

4

1 回答 1

3

因此,您将 some_var 传递给该方法,而不是将其用作实例变量,这意味着您实际上并不需要 self. 您正在使用 process_var 作为静态方法,因为它正在传递它需要的所有数据。您可以使用静态方法装饰器并删除 self ,如下所示:

class Example:
    def __init__(self, some_var):
        self.another_var = self.process_var(some_var)

    @staticmethod
    def process_var(some_var):
        return some_var*2

如果您要改为使用实例变量,它将如下所示

class Example:
    def __init__(self, some_var):
        self.some_var = some_var
        self.another_var = self.process_var()

    def process_var(self):
        return self.some_var*2

静态方法方法在这里更简洁,因为通过使用实例变量,您需要在调用 process_var 之前了解 some_var 的当前状态,否则结果会有所不同。

您可以在 pyrightconfig.json 文件中将 reportUnusedVariable 设置为 false,但我不建议这样做,因为 pyright 会为您提供有关如何重构代码的宝贵信息。

于 2021-03-25T15:33:06.783 回答