2012-09-24 39 views
11

Pyflakes不與下面的代碼處理得非常好:修復pyflakes處理@property二傳手裝飾

@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和syntastic它採用pyflakes我得到以下錯誤:

W806 redefinition of function 'nodes' from line 5 

所以我收到有關@nodes.setter的警告,因爲我重新定義了nodes

如何禁用此無用警告,因爲此代碼是正確的?或者哪個python檢查器正確處理這段代碼?

更新

我遇到了一些問題,當我重構我的代碼,因爲性能和功能有不同的繼承行爲。訪問基類的屬性是不同的。參見:

所以我現在傾向於避免這種語法和使用適當的功能來代替。

回答

3

的各種修補程序,可能在某個時候發佈:

最後似乎最接近釋放,作爲divmod是PyFlakes父項目。

除了自己打補丁包,你總是可以解決的問題:

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

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

不幸的是,這將導致類的命名空間的污染。

+0

我的代碼中斷如果應用這些'修復'sinse我使用覆蓋'__setattr__',如果我重命名setters方法,我創建的Object.__ setattr__'調用失敗。它找不到節點方法。 – Stephan

+0

難道你不能跟着它與'del _nodes_setter' –

0

我遇到了同樣的問題,爲了有效地抑制這個特定的實例,我在添加裝飾器的行尾添加了#NOQA行。在這種情況下,它應該看起來像

@nose.setter # NOQA 

這就解決了我的問題。這並不理想,但爲了我的需要,這已經足夠了。

而不是抑制所有W806警告,這是爲了捕獲其實際上可能需要修復的其他實例。