2009年9月28日月曜日

privateやprotectedは

Pythonにアクセス修飾子はない

PEP 8 -- Style Guide for Python Code
非公開なメソッドとインスタンス変数にのみ、先頭にアンダースコアを1つ使って命名する。

サブクラスとの名前の衝突を避けるには、先頭にアンダースコアを2つ付けることで、Python の名前修飾ルールが行われる。
と書かれている

変数名などの先頭にアンダースコアを2つ付けると
privateのようになりますが消えたわけでない
class ABC:
    def __init__(self):
        self._x = 1
        self.__y = 2

abc = ABC()

print "_x =", abc._x
print "__y =", abc._ABC__y
print dir(abc)

実行すると
_x = 1
__y = 2
['_ABC__y', '__doc__', '__init__', '__module__', '_x']
__変数名 が _クラス名__変数名
と変化しているだけ

詳細はドキュメントで

0 件のコメント:

コメントを投稿