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

カプセル化は、 オブジェクト指向プログラミング (OOP) Python で。データをラップするという考え方と、1 つの単位内でデータを処理する方法について説明します。これにより、変数やメソッドへの直接アクセスに制限がかかり、データが誤って変更されるのを防ぐことができます。クラスは、メンバーであるすべてのデータをカプセル化するためのカプセル化の一例です。 機能 変数 など。シナリオによっては、クラスの一部のメソッドに制限を設けて、クラス外やサブクラスからアクセスできないようにする必要がある場合があります。このプライベート メソッドを実装するには、機能します。

P Python のプライベート関数

実際の例として、車のエンジンを考えてみましょう。エンジンは点火プラグ、バルブ、ピストンなどの多くの部品で構成されています。ユーザーはこれらの部品を直接使用するわけではなく、単にそれらを使用する部品の使い方を知っているだけです。これがプライベート メソッドが使用される目的です。これは、クラスの内部機能を外部から隠すために使用されます。 プライベートメソッド これらのメソッドは、クラスの外部からも基本クラスからもアクセスすべきではありません。 Python には、クラス内以外からアクセスできない Private メソッドは存在しません。ただし、プライベート メソッドを定義するには、メンバー名にプレフィックスを付けます。 二重アンダースコア __ 注記: __init__ メソッドは コンストラクタ クラスのオブジェクトがインスタンス化されるとすぐに実行されます。

Python3




# Creating a Base class> class> Base:> > # Declaring public method> > def> fun(> self> ):> > print> (> 'Public method'> )> > # Declaring private method> > def> __fun(> self> ):> > print> (> 'Private method'> )> # Creating a derived class> class> Derived(Base):> > def> __init__(> self> ):> > # Calling constructor of> > # Base class> > Base.__init__(> self> )> > def> call_public(> self> ):> > # Calling public method of base class> > print> (> ' Inside derived class'> )> > self> .fun()> > def> call_private(> self> ):> > # Calling private method of base class> > self> .__fun()> # Driver code> obj1> => Base()> # Calling public method> obj1.fun()> obj2> => Derived()> obj2.call_public()> # Uncommenting obj1.__fun() will> # raise an AttributeError> # Uncommenting obj2.call_private()> # will also raise an AttributeError>

出力:

Public method Inside derived class Public method 
Traceback (most recent call last): File '/home/09d6f91fdb63d16200e172c7a925dd7f.py', line 43, in obj1.__fun() AttributeError: 'Base' object has no attribute '__fun' Traceback (most recent call last): File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 46, in obj2.call_private() File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 32, in call_private self.__fun() AttributeError: 'Derived' object has no attribute '_Derived__fun' 

上記の例は、クラスのプライベート メソッドがクラスの外部からも、どの基本クラスからもアクセスできないことを示しています。ただし、プライベート メソッドには、パブリック メソッド経由でプライベート メソッドを呼び出すことでアクセスできます。

例:

Python3




# Creating a class> class> A:> > # Declaring public method> > def> fun(> self> ):> > print> (> 'Public method'> )> > # Declaring private method> > def> __fun(> self> ):> > print> (> 'Private method'> )> > # Calling private method via> > # another method> > def> Help> (> self> ):> > self> .fun()> > self> .__fun()> # Driver's code> obj> => A()> obj.> Help> ()>

出力:

Public method Private method 

名前のマングリング

Python は、クラス外のプライベート メソッドを呼び出すために使用できる魔法の杖を提供します。これは名前マングリングとして知られています。これは、__geek 形式の識別子 (先頭の少なくとも 2 つのアンダースコア、または末尾のアンダースコア 1 つまで) が _classname__geek に置き換えられることを意味します。ここで、クラス名は、先頭のアンダースコアを取り除いた現在のクラス名です。

例:

Python3




# Creating a class> class> A:> > # Declaring public method> > def> fun(> self> ):> > print> (> 'Public method'> )> > # Declaring private method> > def> __fun(> self> ):> > print> (> 'Private method'> )> # Driver's code> obj> => A()> # Calling the private member> # through name mangling> obj._A__fun()>

出力:

Private method