pythonにはprivate変数はありません。
しかしprivate変数に近いことは実現できます。
##「」1つのprefix##
PEP8上のコーディング規約としては
「」1つのprefixをclass内のみで利用する変数とされています。
この変数はfrom M import *
とした場合、
importされません。
しかし、この変数は
インスタンス化したオブジェクトからのアクセス時には
物理的な機構はなくカプセル化としての役目は果たせません。
##「」2つのprefix##
「」2つのprefixをつけた場合、
ネームマングリング機構が働きます。
Name Manglingとは名前修飾という意味で、
該当のprefixが付いている変数にはpythonコード上で意味が与えられます。
該当の変数名は「_class名」のprefixがついた変数名へと
置換されます。
ただし、これもあくまで変数名が置換されるために
通常のような、インスタンスからの変数名へのアクセスが
できなくなるだけです。
通常よりは硬い実装にはなりますね。
あくまで変数名が変わっているだけなので
置換後の変数名へのアクセスは許します。
本来、ネームマングリング機構は
親クラスと子クラス間での名前衝突を避ける目的の為のもののようです。
(__init__
や、__main__
などのメソッドの所属元クラスをはっきりさせる)
class HogeHoge:
_dummy_prv = "hoge"
__almost_prv = "hoge"
class Main:
hogehoge = HogeHoge()
# 丸見え
a = hogehoge._dummy_prv
# エラー
b = hogehoge.__almost_prv
# こうするとアクセスでちゃう
c = hogehoge._HogeHoge__almost_prv