ホームページ >バックエンド開発 >Python チュートリアル >Python の二重アンダースコア表記はデータ プライバシーの真の形式ですか?
Python の二重アンダースコアの謎: プライバシーの誤った約束
二重アンダースコアの存在にもかかわらず、驚くべきことに、Python の「プライベート」メソッドは次のようになります。完全にプライベートではありません。この明らかな矛盾は、Python のカプセル化に対する独自のアプローチから生じています。
メソッドまたは変数名の先頭に二重アンダースコアが付いている場合、Python はそれを名前を変更するインジケーターとして解釈します。元の名前を使用する代わりに、アンダースコア、クラス名、および元の名前を連結します。たとえば、__myPrivateMethod は _MyClass__myPrivateMethod になります。
この名前スクランブル手法には目的があります。サブクラスがスーパークラスから継承したプライベート メソッドや属性を誤ってオーバーライドすることを防ぎます。次の例を考えてみましょう。
class Foo(object): def __init__(self): self.__baz = 42 def foo(self): print self.__baz
サブクラス Bar がそのスーパークラスのプライベート メンバーと同じ名前のメンバーを定義する場合、Python の名前スクランブル メカニズムにより、これらのメンバーは区別され、潜在的な競合が回避されます。
ただし、この手法では、クラスの外部からプライベート メンバーへの意図的なアクセスを防ぐことはできません。以下の例が示すように、変更された名前を使用して、名前が変更されたプライベート メンバーに直接アクセスできます:
x = Foo() print x._Foo__baz # Output: 42
したがって、Python の二重アンダースコア規則はプライバシーの錯覚を生み出しますが、最終的には弱いカプセル化形式です。これにより、サブクラスによる偶発的なメソッドのオーバーライドは防止されますが、外部エンティティからの意図的なアクセスを防ぐことはできません。
以上がPython の二重アンダースコア表記はデータ プライバシーの真の形式ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。