ошибка pylint — E1101 и E0102 при использовании @property + @foo.setter

Я заметил, что pylint плохо справляется со случаем:

@property
def foo(self):
   return self._bar.foo

@foo.setter
def foo(self, foo_val):
   self._bar.foo = foo_val

Хотя это вполне допустимый синтаксис case, начиная с python2.6.

В нем говорится, что я дважды определил foo и не понимаю синтаксис «.setter» (дает E1101 и E0102).

Есть ли обходной путь для этого без изменения кода? Я не хочу отключать ошибки, так как они важны для других мест.

Есть ли какой-либо другой инструмент, который я могу использовать, который справляется с этим лучше? Я уже проверил pyflakes, и он ведет себя так же. Анализ кода PyDev, похоже, лучше справляется с этим конкретным случаем, но он не проверяет соглашения, рефакторинг и другие интересные функции, которые делает pylint, и я не могу запустить его из внешнего скрипта (или могу??)

Спасибо!


person yonix    schedule 20.10.2010    source источник


Ответы (4)


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

person gurney alex    schedule 23.11.2010

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

def foo(self, foo_val): # pylint: disable-msg=E0102
person jchl    schedule 20.10.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++.

person hughdbrown    schedule 20.10.2010
comment
:( это то, чего я боялся - я бы предпочел не менять существующий код. Но я согласен, что в любом случае это выглядит лучше. - person yonix; 21.10.2010
comment
Что ж, тогда вы можете добавить # pylint комментариев, как предлагает @jchl, чтобы выборочно отключить жалобы. - person hughdbrown; 21.10.2010
comment
Сообщение через 8 лет после публикации этого ответа: в текущем питоне этот синтаксис значительно уступает тому, что показано в вопросе. Возможно, должно быть редактирование, объясняющее, что этот синтаксис больше не используется? - person Gloweye; 04.09.2018
comment
@JaccovanDorp, я бы не торопился с этим. Я только что поднял этот вопрос, stackoverflow.com/questions/53598374/, и этот синтаксис, похоже, устраняет проблему - person Vince W.; 03.12.2018
comment
Смотрите мой ответ там для деталей - person Gloweye; 04.12.2018

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

person Glyph    schedule 31.03.2012