Python の疑似プライベートメンバ関数と疑似プロテクトメンバ関数2022年02月11日 13時17分58秒

C++ や Java 言語やオブジェクト指向型の経験があると、是非とも内部実装とその為の関数をプライベート関数やプロテクト関数にして隠したくなる。

Python 言語自体にはそのような概念はない。

そこで、Python では慣習で対応している。プライベートメンバ関数は関数名を下線二つで始める。プロテクトメンバ関数は関数名を下線一つで始める。

class C:
    def __private_function( self ):
        pass:
    def _protected_function( self ):
        pass:
なお、Python には、下線二つで始まるメンバ関数とメンバ変数は名前マングリングを行う。下線一つとクラス名を更に追記して内部的に保持している。 _C__private_function が上の関数の表記になる。その為、プライベート関数と名乗ってはいても、外からの参照も可能。

pytest 等でテストを書いていると、テストの書き易さやテストのやり易さ等のバランスから、現実的には大体の関数はプロテクト関数で落ち着いている。