読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

プライベート変数とやらをPythonでやってみた

Python

名前の難号化は、クラスにおいて、 ``プライベートな'' インスタンス変数やメソッドを定義する際に、導出クラスで定義されるインスタンス変数を気にしたり、クラスの外側のコードからインスタンス変数をいじりまわすことがないように簡単に定義できるようにするためのものです。

Pythonチュートリアル 9.6 プライベート変数

Python

よく解らないから、とりあえず書いてみる。

class Hoge:
     def put(self):
          print "Fugera!"
     def __private(self):
          print "Private!"
実行結果
Fugera!
Traceback (most recent call last):
  File "/tmp/py994PvY", line 9, in 
    c.__private()
AttributeError: Hoge instance has no attribute '__private'

《訳》属性エラー:Hoge インスタンスに'__private'なんて属性はねぇ(#゚Д゚)

調べてみた
>>> c = Hoge()
>>> dir(c)
['_Hoge__private', '__doc__', '__module__', 'put']
>>> c._Hoge__private()
Private!

'_Hoge__private'でアクセスできた。

難号化の規則は主に不慮の事故を防ぐためのものだということに注意してください; 確信犯的な方法で、プライベートとされている変数にアクセスしたり変更することは依然として可能なのです。

Pythonチュートリアル 9.6 プライベート変数

ほほぅ(゚Д゚)