Python プライベート変数とプライベート メソッドの概要

Python プライベート変数とプライベート メソッドの概要

Python のプライベート変数とプライベート メソッドに関しては、通常の状況では、開発者はメソッドまたは属性名の前に 1 つのアンダースコア (_) を追加して、メソッドまたは属性が内部使用のみであることを示すことができますが、これは単なる慣例であり、必須ではありません。外部からのアクセスを許可しないでください。本当に「プライベート」効果を実現するには、メソッド名または属性名の前に二重アンダースコア (__) を追加し、メソッド名または属性名を Python 内で自動的に書き換えて、クラス外から直接アクセスできないようにします。アクセスするには、アンダースコアを 1 つ追加し、その前にクラス名を追加することで引き続きアクセスできます。

Python のプライベート変数

Python では、プライベート変数は、クラス定義内の 2 つのアンダースコア (__) で始まる変数です。これらの変数はクラスの外部から直接アクセスできないため、プライベートとみなされます。

[Pythonプライベート変数の公式説明https://docs.python.org/zh-cn/3/tutorial/classes.html#private-variables ]

Python では、属性の名前の前に二重アンダースコアが付けられ、単純な名前ではクラス外から属性にアクセスできなくなります。ただし、クラス内では、これらのプロパティは、特別な名前で参照する必要があることを除いて、他のプロパティと同様に使用できます。

例えば:

class MyClass:
    def __init__(self):
        self.__private_var = 42

    def get_private_var(self):
        return self.__private_var

my_object = MyClass()
print(my_object.get_private_var())  # 输出结果:42
#print(my_object.__private_var)      # 报错:AttributeError: 'MyClass' object has no attribute '__private_var'
print(my_object._MyClass__private_var)# 输出结果:42 ,可以这样访问私有变量,但是不建议

上記のコードでは、MyClass というクラスを定義し、そのコンストラクター __init__() にプライベート変数 __private_var を設定しました。次に、プライベート変数 __private_var の値を返す get_private_var() というメソッドを定義します。

MyClass の新しいインスタンスを作成し、get_private_var() メソッドを呼び出すと、プライベート変数の値を正常に取得して出力できます。ただし、プライベート変数 __private_var に直接アクセスしようとすると、属性はパブリックではなく、クラスの外部から直接アクセスできないため、Python は AttributeError 例外をスローします。

Python では、プライベート プロパティは真にプライベートではないことに注意することが重要です。特別な名前を使用してアクセスすることもできます。具体的には、Python はプライベート変数名を、クラス名と変数名を含み、接頭辞として 1 つのアンダースコアが付加された新しい変数名として解釈します (_MyClass__private_var など)。このアプローチでは場合によってはプライベート変数にアクセスできますが、コードの理解と保守が難しくなるため、使用しないことを強くお勧めします。

Python のプライベート メソッド

Python では、二重アンダースコア (__) を使用して、クラス内でのみアクセスできる「プライベート」メソッドを定義できます。具体的には、二重アンダースコアで始まるメソッド名は Python インタプリタによって _ClassName__my_private_method の形式に変更されるため、外部から直接呼び出すことはできません。

例えば:

class MyClass:
    def __init__(self):
        self.__my_private_var = 42

    def __my_private_method(self):
        print("This is a private method.")
        print(f"The value of my_private_var is {self.__my_private_var}.")

obj = MyClass()
# obj.__my_private_method()  # 报错:AttributeError: 'MyClass' object has no attribute '__my_private_method'
obj._MyClass__my_private_method()  # Output: This is a private method. The value of my_private_var is 42.

この例では、クラス MyClass を定義し、その中にクラス内でのみアクセスできる「プライベート」メソッド __my_private_method を定義します。次に、MyClass のオブジェクトを作成し、それを変数 obj に割り当てますが、メソッドが「プライベート」であるため、obj.__my_private_method() を直接呼び出そうとすると、AttributeError が発生します。代わりに、_MyClass__my_private_method() メソッドを通じてこのメソッドを間接的に呼び出すことができます。

Python では特別な名前を使用して「プライベート」メソッドにアクセスすることができますが、これは適切なプログラミング スタイルではありません。

付録

Python/クラスとインスタンス - アクセス制限https://www.codenong.com/cs106668667/

Python オブジェクト指向プログラミングにおけるクラス定義、インスタンス化、カプセル化、プライベート変数/メソッドの詳細な説明https://www.jb51.net/article/157112.htm

Supongo que te gusta

Origin blog.csdn.net/cnds123/article/details/131152069
Recomendado
Clasificación