Как исправить ошибки PyDev "метод должен иметь self в качестве первого параметра"
Я разрабатываю 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 ответов
вы можете отключить эту ошибку в настройках...
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()
чего еще вы ожидаете? Проверки ошибок помогут вам. Если вы не думаю, что они законные ошибок, отключить их или рефакторинг кода.
в этом случае я бы сказал, что рефакторинг кода. Это более читабельно, о чем свидетельствует ответ Короля радикала. Он этого не понимал!--2--> другой self
.
используя Ctrl+1
в строке с ошибкой от PyDev всегда будет приносить вам исправление, которое позволит вам игнорировать ошибку PyDev в строке. В этом конкретном случае это позволит вам игнорировать ошибку, добавив #@NoSelf
до конца строки. Ctrl+1
также полезно, когда требуется какой-то неиспользуемый импорт и в других ситуациях.
IMO это глупое предупреждение. the имя "Я" - это только условность. У меня появилась привычка использовать имя"_", чтобы имена членов были более очевидными,
class myClass( object ):
def __init__( _, color, shape, weight ):
_.color=color
_.shape=shape
_.weight=weight
...
и я получаю это предупреждение по всей моей библиотеке тысяч строк кода. Так что я отключу это предупреждение. Было бы неплохо иметь возможность указать "для этого проекта я использую '_' по соглашению"...
Это не должно быть ошибкой в первую очередь, так как использование "себя" является только широко принятым соглашением. Это должно быть предупреждение в лучшем случае, в смысле "вы уверены, что используете экземпляр класса в качестве первого аргумента?"
PyDev говорит вам, что методы класса Python должны иметь self
в качестве первой переменной, которую они получают, если они собираются получить доступ к переменным-членам класса. Смотрите: http://www.python.org/doc/faq/general/#why-must-self-be-used-explicitly-in-method-definitions-and-calls
Edit: мне изначально не приходило в голову, что вы можете использовать s
вместо self
, но с учетом других ответов, это может быть. Однако, если вы собираетесь сделать это, вы также нужно использовать s
как ваша переменная в методе, а не self
.
вы можете использовать декоратор:
class aClass:
def __init__(self): # instance-dependent method
self.atribite1 = []
self.atribute2 = 0
@staticmethod
def static(): # static method
pass
def __enter__(self):
и
def __exit__(self, type, value, tb):
методы-члены класса всегда должны иметь свой первый параметр self