13

Eclipse で PyDev を使用して Python で開発していますが、コードの一部でコード分析ツールでエラーが発生します。具体的には:

class Group(object):
    def key(self, k):
        class Subkey(object):
            def __enter__(s):
                self._settings.beginGroup(k)
                return self

            def __exit__(s, type, value, tb):
                self._settings.endGroup()

         return Subkey()

エラー"Method '__enter__- group' should have self as first parameter"が表示され、同様のエラーが__exit__. self別の変数に代入して他のメソッド シグネチャで変数を再利用せずにこれを解決する方法はありますか?

4

6 に答える 6

20

設定でそのエラーを無効にすることができます...

Window > Preferences > Pydev > Editor > Code Analysis > Others

またはコードをリファクタリングします...

class Group(object):
    def key(self, k):
        outer_self = self
        class Subkey(object):
            def __enter__(self):
                outer_self._settings.beginGroup(k)
                return outer_self

            def __exit__(self, type, value, tb):
                outer_self._settings.endGroup()

         return Subkey()

他に何を期待しますか?エラーチェックはあなたを助けるためにあります。正当なエラーではないと思われる場合は、それらを無効にするか、コードをリファクタリングしてください。

この場合、コードをリファクタリングします。King Radical's answer で証明されているように、より読みやすくなっています。彼はそれsが別のものであることを理解していませんでしたself

于 2010-01-21T20:53:15.887 に答える
18

PyDev からのエラーのある行で使用Ctrl+1すると、その行の PyDev エラーを無視できる修正が常に得られます。この特定のケースでは#@NoSelf、行末に追加することでエラーを無視できます。Ctrl+1未使用のインポートが必要な場合や、他の状況下でも役立ちます。

于 2010-02-12T01:00:57.823 に答える
3

IMOこれはばかげた警告です。「自己」という名前は単なる慣例ですメンバー名をわかりやすくするために「_」という名前を使う習慣がありましたが、

class myClass( object ):
    def __init__( _, color, shape, weight ):
        _.color=color
        _.shape=shape
        _.weight=weight
...

そして、何千行ものコードのライブラリ全体でこの警告が表示されます。したがって、この警告をオフにします。「このプロジェクトでは、慣例により「_」を使用します」と指定できると便利です。

于 2011-10-28T09:52:44.217 に答える
3

「self」の使用は広く受け入れられている慣習にすぎないため、そもそもエラーではないはずです。「最初の引数としてクラス インスタンスを使用していてよろしいですか?」という意味で、せいぜい警告である必要があります。

于 2010-01-21T23:35:47.683 に答える
2

selfPyDev は、Python クラス メソッドがクラス メンバー変数にアクセスする場合、受け取る最初の変数として持つ必要があることを伝えています。参照: http://www.python.org/doc/faq/general/#why-must-self-be-used-explicitly-in-method-definitions-and-calls

s編集:の代わりに使用している可能性があることは最初は思いつきませんでしselfたが、他の回答を考えると、そうかもしれません。sただし、それを行う場合は、メソッド内の変数としてではなく. も使用する必要がありますself

于 2010-01-21T20:54:34.687 に答える