web-dev-qa-db-ja.com

Pylint W0212保護アクセス

Pythonでは、1つのアンダースコアを前に付けると、メンバーはそのクラスの外部からアクセスできなくなります。これは JavaC++ のようにクラスごとに行われているようです。

ただし、pylintはオブジェクトごとにこの規則を適用するようです。 #pylint: disable=protected-accessに頼らずにクラスごとのアクセスを許可する方法はありますか?

class A:
    def __init__(self):
        self._b = 5

    def __eq__(self, other):
        return self._b == other._b

結果:

pylint a.py
a.py:6: W0212(protected-access) Access to a protected member _b of a client class

Pylintはメッセージ here について説明します。

19
Jim K

pylintはotherがどのタイプであるかを知りません(どのようにすれば、Aのインスタンスをすべてと比較できますか)、したがって警告。警告を無効にする方法はないと思います。

その行に# pylint: disable=W0212を追加して、その1行のみの警告を無効にすることができます。

14
Christian Geier

クリスチャンガイアーは、なぜエラーが発生するのか、そしてエラーを無効にする方法について正しいです。

ただし、コードの変更を検討することをお勧めします。pylintは、重要なことを伝えています。例のコードから、クラスAのオブジェクトをクラスAの他のオブジェクトと比較するeqを使用するように見えますが、この例では、呼び出し元がA() == C()を試行しないことを保証しません。 Circle()._radius == Sphere._radiusをチェックするときにTrueを返すと、問題が発生する可能性があります。

これを処理する方法については、 this stackoverflow thread を参照してください。

1
Channing Moore