Pylint Bug - E1101 & E0102 при использовании @Property + @ foo.setter

StackOverflow https://stackoverflow.com/questions/3980038

  •  09-10-2019
  •  | 
  •  

Вопрос

Я заметил, что Пилинт не работает хорошо, случай:

@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!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top