ホームページ >バックエンド開発 >Python チュートリアル >一重アンダースコアと二重アンダースコアは、Python での変数とメソッドの可視性にどのような影響を与えますか?

一重アンダースコアと二重アンダースコアは、Python での変数とメソッドの可視性にどのような影響を与えますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 08:19:09861ブラウズ

How Do Single and Double Underscores Affect Variable and Method Visibility in Python?

アンダースコアのマスク解除: Python の単一アンダースコアと二重アンダースコアについて理解する

Python では、識別子の前に 1 つまたは 2 つの先頭のアンダースコアが存在すると、クラス内での意味と可視性を変更する、またはmodule.

単一アンダースコア: 内部使用インジケーター

先頭のアンダースコアは、属性またはメソッドが現在のクラス内での内部使用を目的としていることを示します。ただし、これは単なる慣例です。プライバシーは強制されません。さらに、モジュール関数の先頭の 1 つのアンダースコアは、外部モジュールによってインポートされないことを示します。

二重アンダースコア: 名前のマングリング

先頭の 2 つのアンダースコアは、名前のマングリングを示します。これらの識別子は、先頭に ClassName が追加された状態で内部的に変換されます。ここで、ClassName は、先頭のアンダースコアを削除した現在のクラス名です。このメカニズムにより、クラスプライベートのインスタンスとクラス変数の定義が可能になり、外部アクセスに対するある程度の保護が提供されます。ただし、断固とした個人でもプライベート変数にアクセスできるため、名前のマングリングによって絶対的なプライバシーが保証されるわけではないことに注意することが重要です。

例:

次のクラスを考えてみましょう:

class MyClass():
    def __init__(self):
        self.__superprivate = "Hello"
        self._semiprivate = ", world!"
  • __superprivate は真のプライベート変数であり、MyClass インスタンス内でのみアクセス可能であり、
  • _semiprivate は従来プライベートですが、直接アクセスできます。

出力例に示されているように、__superprivate に直接アクセスすると AttributeError が発生しますが、_semiprivate にはアクセスできます。 .

__dict__ 属性は、__superprivate と __superprivate の両方の存在を明らかにします。 _semiprivate がマングルされており、名前マングルメカニズムが確認されています。

以上が一重アンダースコアと二重アンダースコアは、Python での変数とメソッドの可視性にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。