11

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 チェッカーはどれですか?

アップデート

プロパティと関数の継承動作が異なるため、コードをリファクタリングしたときにいくつかの問題に遭遇しました。基本クラスのプロパティへのアクセスは異なります。見る:

そのため、この構文を避けて、代わりに適切な関数を使用する傾向があります。

4

3 に答える 3

5

pyflakes issue tracker には、この問題のパッチを含むオープン プル リクエストがあります。パッチを適用したバージョンを GitHub からダウンロードするか、パッチを手動で適用できます。

于 2012-09-24T11:02:29.380 に答える
3

ある時点でリリースされる可能性のあるさまざまな修正:

divmod は PyFlakes の親プロジェクトであるため、最後のバージョンがリリースに最も近いようです。

自分でパッケージにパッチを適用する以外に、いつでも問題を回避できます。

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

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

残念ながら、これによりクラスの名前空間が汚染されます。

于 2012-09-24T11:08:32.910 に答える
0

私はこれと同じ問題に遭遇し、この特定のインスタンスだけを効果的に抑制するために、デコレータを追加した行の最後に # NOQA 行を追加しました。この場合、次のようになります

@nose.setter  #  NOQA 

そして、これで問題が解決しました。理想的ではありませんが、私のニーズには十分でした。

これは、すべての W806 警告を抑制するのではなく、実際に修正する必要がある他のインスタンスをキャッチするために行われます。

于 2013-01-15T00:31:52.057 に答える