ошибка Pylint - E1101 и E0102 при использовании @property + @ foo.setter - PullRequest
4 голосов
/ 20 октября 2010

Я заметил, что Pylint плохо обрабатывает случай:

@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, и я не могу запустить его из внешнего скрипта (или я могу ??)

Спасибо!

Ответы [ 4 ]

4 голосов
/ 21 октября 2010

Если вы не хотите отключать ошибки глобально, вы можете отключить их для этих конкретных строк, например:

def foo(self, foo_val): # pylint: disable-msg=E0102
2 голосов
/ 23 ноября 2010

Это билет http://www.logilab.org/ticket/51222 в проекте Pylint.Следите за его состоянием.

1 голос
/ 20 октября 2010

Ха. Раздражает. И все основные инструменты, которые я смог найти (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-цитата:

Геттеры и сеттеры относятся к грустным мир Java и C ++.

0 голосов
/ 01 апреля 2012

Это было , о котором сообщали как об ошибке в pyflakes , и это, кажется, исправлено в текущем транке. Так что я думаю, что ответ (сейчас): Pyflakes!

...