Pythonでは、1つのアンダースコアを前に付けると、メンバーはそのクラスの外部からアクセスできなくなります。これは Java や C++ のようにクラスごとに行われているようです。
ただし、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 について説明します。
pylintはother
がどのタイプであるかを知りません(どのようにすれば、Aのインスタンスをすべてと比較できますか)、したがって警告。警告を無効にする方法はないと思います。
その行に# pylint: disable=W0212
を追加して、その1行のみの警告を無効にすることができます。
クリスチャンガイアーは、なぜエラーが発生するのか、そしてエラーを無効にする方法について正しいです。
ただし、コードの変更を検討することをお勧めします。pylintは、重要なことを伝えています。例のコードから、クラスAのオブジェクトをクラスAの他のオブジェクトと比較するeqを使用するように見えますが、この例では、呼び出し元がA() == C()
を試行しないことを保証しません。 Circle()._radius == Sphere._radius
をチェックするときにTrue
を返すと、問題が発生する可能性があります。
これを処理する方法については、 this stackoverflow thread を参照してください。