11

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

使用使用 pyflakes 的 vim 和 syntastic 我得到以下错误:

    W806 redefinition of function 'nodes' from line 5

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

由于此代码正确,如何禁用此无用警告?或者哪个 python 检查器正确处理了这段代码?

更新

我在重构代码时遇到了一些问题,因为属性和函数具有不同的继承行为。访问基类的属性是不同的。看:

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

4

3 回答 3

5

pyflakes 问题跟踪器上有一个开放的拉取请求,其中包含此问题的补丁;你可以从 GitHub 下载补丁版本,或者手动应用补丁。

于 2012-09-24T11:02:29.380 回答
3

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

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

除了自己修补软件包之外,您始终可以解决此问题:

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

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

不幸的是,这会导致类命名空间的污染。

于 2012-09-24T11:08:32.910 回答
0

我遇到了同样的问题,为了有效地抑制这个特定的实例,我在添加装饰器的行的末尾添加了 #NOQA 行。在这种情况下,它应该看起来像

@nose.setter  #  NOQA 

这为我解决了问题。这并不理想,但对于我的需要来说已经足够了。

这样做不是为了抑制所有 W806 警告,而是为了捕获可能实际需要修复的其他实例。

于 2013-01-15T00:31:52.057 回答