Как исправить ошибки PyDev «Метод должен иметь self в качестве первого параметра» - PullRequest
10 голосов
/ 21 января 2010

Я занимаюсь разработкой на Python с использованием PyDev в Eclipse, и часть моего кода генерирует ошибки в инструменте анализа кода. В частности:

class Group(object):
    def key(self, k):
        class Subkey(object):
            def __enter__(s):
                self._settings.beginGroup(k)
                return self

            def __exit__(s, type, value, tb):
                self._settings.endGroup()

         return Subkey()

Дает мне ошибку "Method '__enter__- group' should have self as first parameter" и аналогичную ошибку для __exit__. Есть ли способ решить эту проблему без присвоения self другой переменной и повторного использования переменной в сигнатурах других методов?

Ответы [ 7 ]

19 голосов
/ 21 января 2010

Вы можете отключить эту ошибку в настройках ...

Window > Preferences > Pydev > Editor > Code Analysis > Others

Или рефакторинг кода ...

class Group(object):
    def key(self, k):
        outer_self = self
        class Subkey(object):
            def __enter__(self):
                outer_self._settings.beginGroup(k)
                return outer_self

            def __exit__(self, type, value, tb):
                outer_self._settings.endGroup()

         return Subkey()

Что еще вы ожидаете? Проверки ошибок помогут вам. Если вы не считаете их допустимыми ошибками, отключите их или измените код.

В этом случае я бы сказал рефакторинг кода. Это более читабельно, о чем свидетельствует ответ короля Радикала. Он не понимал, что s был другим self.

18 голосов
/ 12 февраля 2010

Использование Ctrl+1 в строке с ошибкой PyDev всегда принесет вам исправление, которое позволит вам игнорировать ошибку PyDev в строке.В этом конкретном случае это позволит вам игнорировать ошибку, добавив #@NoSelf в конец строки.Ctrl+1 также полезно, когда требуется неиспользованный импорт и в других ситуациях.

3 голосов
/ 28 октября 2011

ИМО это глупое предупреждение. имя"Я" - это только соглашение. У меня есть привычка использовать имя "_", чтобы имена членов были более очевидными,

class myClass( object ):
    def __init__( _, color, shape, weight ):
        _.color=color
        _.shape=shape
        _.weight=weight
...

и я получаю это предупреждение по всей моей библиотеке тысяч строк кода. Так что я отключу это предупреждение. Было бы неплохо иметь возможность указать "для этого проекта я использую '_' по соглашению" ...

2 голосов
/ 25 июля 2017

Вы можете использовать декоратор:

class aClass:
        def __init__(self):       # instance-dependent method
        self.atribite1 = []
        self.atribute2 = 0 

        @staticmethod   
        def static():             # static method
        pass

Для этого используется встроенная функция

2 голосов
/ 22 января 2010

Во-первых, это не должно быть ошибкой, так как использование «self» - это только широко распространенное соглашение Самое большее, это должно быть предупреждение, в смысле «вы уверены, что используете экземпляр класса в качестве первого аргумента?»

2 голосов
/ 21 января 2010

PyDev говорит вам, что методы класса Python должны иметь self в качестве первой получаемой переменной, если они собираются получить доступ к переменным члена класса.См .: http://www.python.org/doc/faq/general/#why-must-self-be-used-explicitly-in-method-definitions-and-calls

Редактировать: Изначально мне не пришло в голову, что вы можете использовать s вместо self, но, учитывая другие ответы, это может быть.Однако, если вы собираетесь это сделать, вам также необходимо использовать s в качестве переменной в методе, а не self.

0 голосов
/ 21 января 2010
def __enter__(self):

и

def __exit__(self, type, value, tb):

Методы-члены класса всегда должны иметь свой первый параметр self

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...