То, как я фиксирую PyDev “Метод, должно иметь сам как первый параметр” ошибки

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

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()

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

10
задан Chris B. 21 January 2010 в 20:47
поделиться

4 ответа

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

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

или Refactor код ...

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()

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

В этом случае я скажу рефактору код. Это более читаемое, о чем свидетельствует ответ King Radical. Он не понял, что S был еще другим .

19
ответ дан 3 December 2019 в 13:32
поделиться

Не должно быть ошибкой в ​​первую очередь, поскольку использование «я» - это только широко принятая конвенция. Это должно быть предупреждение максимум, в смысле «вы уверены, что вы используете экземпляр класса как первый аргумент?»

2
ответ дан 3 December 2019 в 13:32
поделиться

Вы можете отключить эту ошибку в предпочтениях ...

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

или Refactor код ...

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()

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

В этом случае я скажу рефактору код. Это более читаемое, о чем свидетельствует ответ King Radical. Он не понимал, что S был другим Я .

-121--3033322-

Pydev говорит вам, что методы класса Python должны быть Self как первая переменная, которую они получают, если они собираются получить доступ к переменным классами. См.: http://www.python.org/doc/faq/general.org/docy-must-fevels-beb- Используемые-Плицы-in-method-definitions-and-calls

Редактировать: он не сделал Для меня изначально возникают, что вы можете использовать S вместо Self , но с учетом других ответов, которые могут быть. Однако, если вы собираетесь сделать это, вам также необходимо использовать S как ваша переменная в способе, а не Self .

2
ответ дан 3 December 2019 в 13:32
поделиться

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

18
ответ дан 3 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: