GeeksforGeeks

前提条件。 Pythonのアンダースコア
Pythonでは、オブジェクトの内部以外ではアクセスできない「Private」インスタンス変数は存在しません。 しかし、ほとんどの Python コードとコーダーは、アンダースコアを先頭に持つ名前、たとえば _geek は、それが関数、メソッド、またはデータ メンバーであろうと、API または任意の Python コードの非公開部分として扱われる、という慣例に従っています。 また、例えば for _ in range(10), __init__(self) のように、様々な形式の末尾アンダースコアの概念も理解するようにします。

マングリングとその仕組み

Pythonでは、ネームマングリングと呼ばれるものがあります。これは、基本的にサブクラスによって定義された名前と名前の衝突を避けるために、クラスのプライベートなメンバーの有効活用のための限定サポートが存在することを意味しています。 ここで classname は現在のクラス名で、先頭のアンダースコアは取り除かれます。 クラスの定義に含まれる限り、このマングリングは行われます。 これは、クラス内のメソッド呼び出しを中断することなく、サブクラスでメソッドをオーバーライドするのに便利です。
この例を見て、このアンダースコアがどのように機能するかを見つけてみましょう。

マングリング ルールは主に事故を回避するために設計されていますが、プライベートと見なされる変数にアクセスしたり変更したりすることは可能です。 これは、デバッガーなどの特別な状況で役に立つことさえあります。

_単一の先頭アンダースコア

つまり、基本的にメソッド、関数、またはデータ メンバーの先頭にある 1 つのアンダーラインは、このメソッドは API の一部ではないのでアクセスしてはいけないということを意味しています。 コードのこのスニペットを見てみましょう。

このスニペットは Django のソースコード (django/forms/forms.py) から引用されています。 これは errors がプロパティであり、API の一部でもあることを示唆していますが、メソッドである _get_errors は「プライベート」なので、アクセスしてはいけません。

__ダブルリーディングアンデルコール

最初にある二つのアンダーラインは、多くの混乱の原因となっています。 ダブル アンダースコアは、クラス間の属性名の衝突を避けるために、クラスの属性名を混同します。 たとえば

__先頭のダブル アンダースコアと末尾のダブル アンダースコア__

先頭と末尾のダブル アンダースコアには、もう 1 つのケースがあります。 これは、__len__や__init__などの特殊な変数やメソッド(「マジックメソッド」と呼ばれる)を使っているときに起こります。 これらのメソッドは名前に特別な構文的特徴を与える。 例えば、__file__はPythonファイルの場所を示し、__eq__はa == b式が実行されたときに実行されます。

Python

div

p

classGeek:
def__init__(self, ab):
self.ab =ab
def__custom__(self):
pass



This article is contributed by Chinmoy Lenka. GeeksforGeeks が好きで、貢献したい場合は、contribute.geeksforgeeks.org を使用して記事を書くか、[email protected] に記事を郵送することもできます。 あなたの記事がGeeksforGeeksのメインページに表示され、他のギークを助けることができます。
Python Docs, hackernoon.com, igorsobreira.comを参考にしました。
何か間違ったことを見つけたり、上記のトピックについてもっと情報を共有したい場合は、コメントを書いてください。

まずは面接対策から Python DSコースでデータ構造の概念を強化しましょう

Article Tags :