Pylint Bug - E1101 & E0102 при использовании @Property + @ foo.setter
Вопрос
Я заметил, что Пилинт не работает хорошо, случай:
@property
def foo(self):
return self._bar.foo
@foo.setter
def foo(self, foo_val):
self._bar.foo = foo_val
Хотя это совершенно действительный синтаксис корпуса с момента Python2.6
Он говорит, что я дважды определил foo, и не понимаю синтаксис ".setter" (дает E1101 & E0102).
Есть ли обходной путь для этого без необходимости менять код? Я не хочу отключить ошибки, поскольку они важны для других мест.
Есть ли другой инструмент, который я могу использовать, который обрабатывает это лучше? Я уже проверил Pyflakes, и это ведет себя так же. Анализ кода Pydev, по-видимому, справится с этим конкретным случаем лучше, но он не проверяет конвенции, рефакторинг и другие крутые функции Pylint, и я не могу запустить его от внешнего скрипта (или я могу ??)
Спасибо!
Решение
Это билет http://www.logilab.org/ticket/51222. на проекте Pylint. Контролировать его состояние.
Другие советы
Если вы не хотите отключить ошибки во всем мире, вы можете отключить их для этих конкретных строк, например:
def foo(self, foo_val): # pylint: disable-msg=E0102
Хм. Раздражающий. И все основные инструменты, которые я мог найти (Pyflakes, Pylint, Pychecker), выставляют эту проблему. Похоже, проблема начинается в байтовом коде, но я не могу получить dis
Чтобы дать мне любой код байта для объектных свойств.
Похоже, вам было бы лучше, если вы использовали этот синтаксис:
# Changed to longer member names to reduce pylint grousing
class HughClass(object):
def __init__(self, init_value):
self._hugh = init_value
def hugh_setter(self):
return self._hugh * 2
def hugh_getter(self, value):
self._hugh = value / 2
hugh = property(hugh_getter, hugh_setter)
Вот а Хороший блог Статья в теме. Lol-quote:
Геттерс и сеттели принадлежат к печальному миру Java и C ++.
Это было сообщается как ошибка в Pyflakes, и кажется, что в текущем багажнике. Так что я думаю, что ответ (сейчас): Pyflakes!