2008年10月3日金曜日

Pythonのプライベート変数にアクセス

Pythonのアクセス権で、privateにしたいものは最初に__(アンダーバーを2つ)付けて命名する。他の言語ではアンダーバー1つというコーディング規約があると思うけど、Pythonでは__がプライベート宣言になるので、言語レベルで命名規約になってます。

PHP出身のミーはプライベート変数にはアクセスできないと思い込んでました(PHPでもやり方があるかもしれないけど。PHP5以降の話ね。PHP5より以前はアクセス権なんてないから)。でもPythonはアクセスできるようです。

電化製品でいうと、使用者が触っていい部分(ボタンとか)がpublicで、触ると感電したりして危ないから隠されている部分がprivateだと考えると分かりやすいです。 Pythonはprivateな部分を金庫に保管するようなほど堅牢な作りはしていません。不慮の事故を避けるためにプライベート変数があるためで、確信犯的にプライベート変数にアクセスできるようになっているとマニュアルに書いてあります。 Pythonマニュアル 9.6プライベート変数 プライベート変数にアクセスする場合は自己責任でという感じですね。

プライベート変数に実際にアクセスしてみる。

_クラス名__プライベート変数
例: private
class Foo:
  def __init__(self):
    self.__privateVar = "How could you!!";
  def __privateMethod(self):
    print "Don't touch me";

if __name__ == '__main__':
  f = Foo();
  f._Foo__privateMethod();
  print f._Foo__privateVar;
#実行結果
Don't touch me
How could you!!

0 件のコメント: