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的syntastic我得到以下错误:
    W806 redefinition of function 'nodes' from line 5

所以我收到有关@nodes.setter的警告,因为我重新定义了nodes

由于此代码正确,如何禁用此无用的警告?还是哪个python检查器正确处理此代码?

更新

重构代码时遇到了一些问题,因为属性和函数具有不同的继承行为。访问基类的属性是不同的。看:
  • How to call a property of the base class if this property is being overwritten in the derived class?
  • Python derived class and base class attributes?

  • 所以我现在倾向于避免使用这种语法,而改用适当的函数。

    最佳答案

    可能会在某个时候发布的各种修复程序:

  • http://bazaar.launchpad.net/~menesis/pyflakes/pyflakes-mg/revision/38
  • https://github.com/kevinw/pyflakes/pull/12
  • http://bazaar.launchpad.net/~divmod-dev/divmod.org/trunk/revision/2685

  • 最后一个似乎最接近发行版,因为divmod是PyFlakes的父项目。

    除了自己修补软件包之外,您还可以始终解决此问题:
    @property
    def nodes(self):
        return self._nodes
    
    @nodes.setter
    def _nodes_setter(self, nodes):    # FIXME: pyflakes
        ...
    

    不幸的是,这将导致类 namespace 的污染。

    10-02 18:03