pythonpropertiesdecoratorpython-decoratorspyflakes

fix pyflakes dealing with @property setter decorator


Pyflakes does not deal very well with the following code:

@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

Using vim and syntastic which uses pyflakes I get the following error:

    W806 redefinition of function 'nodes' from line 5

So I get warnings about @nodes.setter because I redefine nodes.

How do I disable this useless warning since this code is correct? Or which python checker deals with this code correctly?

Update

I ran into some problems when I refactored my code because properties and functions have different inheritance behavior. Accessing properties of a base class is different. see:

so I now tend to avoid this syntax and use proper functions instead.


Solution

  • Various fixes that might be released at some point:

    The last seems closest to release, as divmod is the parent project for PyFlakes.

    Other than patching the package yourself, you could always work around the issue:

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

    Unfortunately, this will result in pollution of the class namespace.