Исправить pyflakes, связанный с декоратором сетки @property
Pyflakes не очень хорошо справляется со следующим кодом:
@property
def nodes(self):
return self._nodes
@nodes.setter
def nodes(self, nodes):
"""
set the nodes on this object.
"""
assert nodes != [] # without nodes no route..
self.node_names = [node.name for node in nodes]
self._nodes = nodes
Используя vim и синтаксис, который использует pyflakes, я получаю следующую ошибку:
W806 redefinition of function 'nodes' from line 5
Итак, я получаю предупреждения о @nodes.setter
, потому что я переопределяю nodes
.
Как отключить это бесполезное предупреждение, поскольку этот код верен? Или какой контролер python имеет дело с этим кодом правильно?
Обновление
Я столкнулся с некоторыми проблемами, когда я реорганизовал свой код, потому что свойства и функции имеют различное поведение наследования. Доступ к свойствам базового класса отличается. см.:
поэтому теперь я стараюсь избегать этого синтаксиса и вместо этого использовать правильные функции.
Ответы
Ответ 1
Различные исправления, которые могут быть выпущены в какой-то момент:
Последнее кажется самым близким к выпуску, поскольку divmod является родительским проектом для PyFlakes.
Кроме исправления пакета самостоятельно, вы всегда можете решить проблему:
@property
def nodes(self):
return self._nodes
@nodes.setter
def _nodes_setter(self, nodes): # FIXME: pyflakes
...
К сожалению, это приведет к загрязнению пространства имен классов.
Ответ 2
открытый запрос на перенос на трекер треков pyflakes, который включает исправление для этой проблемы; вы можете загрузить исправленную версию из GitHub или применить исправление вручную.
Ответ 3
Я столкнулся с этой же проблемой и для эффективного подавления только этого конкретного экземпляра я добавил строку # NOQA в конце строки, где я добавил декоратор. В этом случае он должен выглядеть как
@nose.setter # NOQA
И это определило проблемы для меня. Это не идеально, но для моих нужд этого было достаточно.
Вместо того, чтобы подавлять все предупреждения W806, это делается для того, чтобы поймать другие экземпляры, где это может потребоваться устранить.