2013.05.01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

MHI 5.0

この「にっき」には暴力シーンやグロテスクな表現が含まれています。

(2013.05.25) 0739

$ Pythonはデータの隠蔽が出来ない?

Ruby - 新しいクラスの作成と既存クラスの変更(インスタンス変数とinitialize) | Kamimura's blog

Pythonはデータの隠蔽が出来ない。上記のrubyやjavascriptのように、同じ名前のデータ属性とメソッドを定義する と上書きされる。データ属性の先頭に下線「_」を付け加えて読みやすくするようにしたり、メソッド名は動詞にするなどして回避はできるけど、外からアクセス、変更可能 である事には変わりはない。(pythonはデータの隠蔽、カプセル化はできない。)

あれ、そうだっけ? 2個の下線(__)を頭につけたら、いけたような

#!/usr/bin/python2

class Klass:
    def __init__(self,value):
        self.member1   = value
        self._member2  = value
        self.__member3 = value

instance = Klass("ahaha")
print "member1=",instance.member1
print "member2=",instance._member2
print "member3=",instance.__member3
$ py foo.py
member1= ahaha
member2= ahaha
member3=
Traceback (most recent call last):
  File "foo.py", line 12, in <module>
    print "member3=",instance.__member3
AttributeError: Klass instance has no attribute '__member3'

woodyring _Klass__member3ならいけてしまうというのが「隠蔽はできない」という理由らしいですが、悪意のある人がいなければ実際は困らないですね。 (2013/05/25 12:48:57)

はやま あら、ほんと。「instance._Klass__member3」いけちゃいますね。ありがとうございます。 (2013/05/25 17:55:46)

(2013.05.23) 0742 | (2013.05.25) 1755

.net(3) C++(3) Cygwin(12) GAME(3) Groovy(1) Linux(2) Lua(39) Mercurial(13) NYAOS(92) OS/2(7) Oracle(3) Perl(4) Python(22) SKK(4) Windows8(1) album(68) ckw(10) coLinux(1) vim(6) wifky(27) 書評(21) (9)

zetamattaのたいじゅー