2012-09-24 19 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 को फिर से परिभाषित करता हूं।

यह कोड सही है क्योंकि मैं इस बेकार चेतावनी को कैसे अक्षम करूं? या कौन सा पायथन चेकर सही ढंग से इस कोड से संबंधित है?

अद्यतन

जब मैं अपने कोड पुनर्संशोधित क्योंकि गुण और कार्य विभिन्न विरासत व्यवहार मैं कुछ समस्याओं का सामना किया। बेस क्लास के गुणों तक पहुंच अलग है। देखें:

इसलिए मैं अब इस वाक्य से बचने और बजाय उचित कार्यों का उपयोग करते हैं।

उत्तर

3

विभिन्न सुधारों कि कुछ बिंदु पर जारी हो सकता है:

पिछले, जारी करने के लिए के रूप में divmod PyFlakes के लिए माता-पिता परियोजना है सबसे करीब लगता है ।

पैकेज पैचिंग खुद के अलावा, आप हमेशा समस्या के समाधान सकता है:

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

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

दुर्भाग्य से, इस वर्ग के नाम स्थान के प्रदूषण का कारण बन जाएगा।

+0

मेरा कोड तोड़ता है अगर उन 'फिक्स' पापसे को लागू करते हैं, तो मैं '__setattr__' ओवरराइड का उपयोग करता हूं जहां' ऑब्जेक्ट .__ setattr__' कॉल मैं विफल करता हूं अगर मैं सेटर्स विधि का नाम बदलता हूं। यह नोड्स विधि नहीं मिल सकता है। – Stephan

+0

आप 'del _nodes_setter' के साथ इसका पालन नहीं कर सके –

5

पाइफ्लेक्स इश्यू ट्रैकर पर open pull request है जिसमें इस समस्या के लिए पैच शामिल है; आप download the patched version from GitHub कर सकते हैं, या मैन्युअल रूप से पैच लागू कर सकते हैं।

0

मैं इस मुद्दे में भाग गया, और इस विशिष्ट उदाहरण को प्रभावी रूप से दबाने के लिए, मैंने लाइन के अंत में # NOQA लाइन जोड़ा जहां मैंने सजावट को जोड़ा। इस मामले में यह

@nose.setter # NOQA 

और यह मेरे लिए मुद्दों को ठीक करना चाहिए। यह आदर्श नहीं है, लेकिन मेरी जरूरतों के लिए यह पर्याप्त था।

सभी W806 चेतावनियों को दबाने के बजाय, यह अन्य उदाहरणों को पकड़ने के लिए किया जाता है जहां इसे वास्तव में ठीक करने की आवश्यकता हो सकती है।

संबंधित मुद्दे