Question

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.

Was it helpful?

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.

OTHER TIPS

There is an open pull request on the pyflakes issue tracker that includes a patch for this issue; you could download the patched version from GitHub, or apply the patch manually.

I ran into this same issue, and to effectively suppress just this specific instance, I added the # NOQA line at the end of the line where I added the decorator. In this case it should look like

@nose.setter  #  NOQA 

And this fixed the issues for me. It's not ideal, but for my needs it was sufficient.

Instead of suppressing all W806 warnings, this is done to catch other instances where it might actually need to be fixed.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top