Как настроить coc-pyright, чтобы он не предупреждал о неиспользуемом параметре self в методе?

Я использую расширение CoC-pyright для CoC в neovim.

Бывают случаи, когда у нас есть метод экземпляра в классе, которому не требуется доступ к переменным self. Например, у меня могут быть некоторые переменные в методе __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

Теперь здесь пиррайт предупреждает меня, что доступ к self невозможен. Есть ли способ настроить Pyright, чтобы он не выдавал предупреждения в таких случаях?

P.S. Передаваемая переменная является переменной, специфичной для экземпляра. Итак, self потребуется, чтобы сделать его переменной экземпляра, верно?


person Abhinav    schedule 25.03.2021    source источник
comment
Здесь та же проблема.   -  person JavaRunner    schedule 25.03.2021


Ответы (1)


Таким образом, вы передаете методу метод some_var вместо того, чтобы использовать его как переменную экземпляра, то есть вам на самом деле не нужен self. Вы используете process_var как статический метод, так как ему передаются все необходимые данные. Вы можете использовать декоратор статического метода и удалить себя следующим образом:

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

Подход статического метода здесь намного чище, так как при использовании переменных экземпляра вам нужно знать, каково текущее состояние some_var, прежде чем вызывать process_var, иначе результаты будут различаться.

Вы можете установить для reportUnusedVariable значение false в файле pyrightconfig.json, но я бы не рекомендовал этого делать, поскольку pyright дает вам ценную информацию о том, как реструктурировать ваш код.

person Ethan Wright    schedule 25.03.2021
comment
Что делать, если вы используете фреймворк, который вызывает ваш метод с дополнительными параметрами, которые вам не нужны. Обычно я делаю *args и **kwargs, чтобы смириться с этим и не использовать их, но пиррайт жалуется на это, даже с reportUnusedVariable=false. - person Marcel; 04.04.2021
comment
Обычно я помещаю del unused_one, unused_two в начало функции, чтобы удалить аргументы и четко указать, что они не используются. Это вторая рекомендация в этом сообщении. - person Ethan Wright; 05.04.2021
comment
Что, если аргумент является отсылкой к чему-то важному? - person Marcel; 05.04.2021
comment
Он просто удаляет его в рамках вашей функции, то есть вы не можете использовать эту переменную позже в функции. Он не удаляет его из контекста вызывающего объекта. - person Ethan Wright; 05.04.2021