Подтвердить что ты не робот

Исправить 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 имеет дело с этим кодом правильно?

Обновление

Я столкнулся с некоторыми проблемами, когда я реорганизовал свой код, потому что свойства и функции имеют различное поведение наследования. Доступ к свойствам базового класса отличается. см.:

поэтому теперь я стараюсь избегать этого синтаксиса и вместо этого использовать правильные функции.

4b9b3361

Ответ 1

Различные исправления, которые могут быть выпущены в какой-то момент:

Последнее кажется самым близким к выпуску, поскольку divmod является родительским проектом для PyFlakes.

Кроме исправления пакета самостоятельно, вы всегда можете решить проблему:

@property
def nodes(self):
    return self._nodes

@nodes.setter
def _nodes_setter(self, nodes):    # FIXME: pyflakes
    ...

К сожалению, это приведет к загрязнению пространства имен классов.

Ответ 3

Я столкнулся с этой же проблемой и для эффективного подавления только этого конкретного экземпляра я добавил строку # NOQA в конце строки, где я добавил декоратор. В этом случае он должен выглядеть как

@nose.setter  #  NOQA 

И это определило проблемы для меня. Это не идеально, но для моих нужд этого было достаточно.

Вместо того, чтобы подавлять все предупреждения W806, это делается для того, чтобы поймать другие экземпляры, где это может потребоваться устранить.