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检查器正确处理此代码?
更新
我在重构代码时遇到了一些问题,因为属性和函数具有不同的继承行为。访问基类的属性是不同的。见:
所以我现在倾向于避免使用这种语法并使用正确的函数。
答案 0 :(得分:5)
pyflakes问题跟踪器上有一个open pull request,其中包含针对此问题的补丁程序;你可以download the patched version from GitHub,或手动应用补丁。
答案 1 :(得分:3)
可能在某些时候发布的各种修补程序:
最后一个似乎最接近发布,因为divmod是PyFlakes的父项目。
除了自己修补软件包之外,您始终可以解决此问题:
@property
def nodes(self):
return self._nodes
@nodes.setter
def _nodes_setter(self, nodes): # FIXME: pyflakes
...
不幸的是,这会导致类命名空间的污染。
答案 2 :(得分:0)
我遇到了同样的问题,并且为了有效地抑制这个特定的实例,我在添加装饰器的行的末尾添加了#NOQA行。在这种情况下,它应该看起来像
@nose.setter # NOQA
这解决了我的问题。这不是理想的,但对我的需求来说已经足够了。
不是抑制所有W806警告,而是捕获可能实际需要修复的其他实例。