pythonでprivate
pythonでprivateは存在しない、らしいことになってるんだけど、なんちゃってならあるようだ。
# privateにすることが主目的の機能ではない
モジュールのツリー構造内で同じ属性名があって、衝突してしまうのを防ぐためのネームマングリングという機能なんだけど、「そのままの名前ではアクセス出来ない」ということを擬似privateとして利用しているわけですな。
# privateにすることが主目的の機能ではない
#!/usr/env/bin python # -*- coding: UTF-8 -*- class hoge: def __init__(self): pass def method1(self): print "called method1" def __method2(self): print "called method2" h = hoge() # アクセスできる h.method1() try: # AttributeError 例外が発生する(そのままの名前じゃアクセスできない) h.__method2() except Exception, detail: print str(detail) # _[クラス名][メソッド名]でアクセスできる h._hoge__method2()実行結果はこんな感じ
$ python mangling.py called method1 hoge instance has no attribute '__method2' called method2属性の先頭に __ をつけることで、インスタンス属性名になる際に _[クラス名]が頭につく。
モジュールのツリー構造内で同じ属性名があって、衝突してしまうのを防ぐためのネームマングリングという機能なんだけど、「そのままの名前ではアクセス出来ない」ということを擬似privateとして利用しているわけですな。