2

クラスは、その属性の1つを外部アクセスからどの程度「保護」できますか?

たとえば、従来の_secret属性を持つクラスでは、元の値に簡単にアクセスできます。

class Paranoid(object):
    def __init__(self):
        self._secret = 0

    def set(self, val):
        self._secret = val * 10

    def get(self):
        return self._secret / 10

p = Paranoid()
p.set(123)
print p.get() # 123
print p._secret # 1230, should be inaccessible

_secretアクセスをより困難にするにはどうすればよいですか?

これには実用的なアプリケーションはありません。アクセスをより困難にする新しい方法があるかどうかだけが気になります(Pythonのコンテキスト内で-たとえば、デバッガーをPythonプロセスに接続して、メモリを検査できるという事実を無視します)。

4

2 に答える 2

6

おそらくゲッターとセッターを探しているでしょう。少し複雑でないアプローチは__secret、名前マングリングを呼び出して に変換するを使用すること_Paranoid__secretです。

しかし、そうです、Python コミュニティは、一部の言語のようにプライバシーを重視していないことに注意してください。または、ことわざにあるように、ここでは私たちはすべて同意した大人です

于 2012-05-08T16:12:16.733 に答える
4
>>> def Paranoid():
...     _secret_dict = {'_secret': 0}
...     class ParanoidClass(object):
...             def set(self, val):
...                     _secret_dict['_secret'] = val * 10
...             def get(self):
...                     return _secret_dict['_secret'] / 10
...     return ParanoidClass()
... 
>>> p = Paranoid()
>>> p.set(123)
>>> p.get()
123

これは、 Steve Yegge のブログ投稿を思い出させます。

于 2012-05-08T16:14:24.707 に答える