Я развиваю в использовании Пайтона 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
к другой переменной и многократному использованию переменной в других подписях метода?
Вы можете отключить эту ошибку в настройках ...
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
был еще другим
.
Не должно быть ошибкой в первую очередь, поскольку использование «я» - это только широко принятая конвенция. Это должно быть предупреждение максимум, в смысле «вы уверены, что вы используете экземпляр класса как первый аргумент?»
Вы можете отключить эту ошибку в предпочтениях ...
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
был другим Я
.
Pydev говорит вам, что методы класса Python должны быть Self
как первая переменная, которую они получают, если они собираются получить доступ к переменным классами. См.: http://www.python.org/doc/faq/general.org/docy-must-fevels-beb- Используемые-Плицы-in-method-definitions-and-calls
Редактировать: он не сделал Для меня изначально возникают, что вы можете использовать S
вместо Self
, но с учетом других ответов, которые могут быть. Однако, если вы собираетесь сделать это, вам также необходимо использовать S
как ваша переменная в способе, а не Self
.
Использование Ctrl + 1
в строке с ошибкой от PyDev всегда даст вам исправление, которое позволит вам игнорировать PyDev ошибка в строке. В этом конкретном случае это позволит вам игнорировать ошибку, добавив # @ NoSelf
в конец строки. Ctrl + 1
также полезен, когда требуется некоторый неиспользуемый импорт и в других ситуациях.