Pythonの関数名の前後に付く__(ダブルアンダースコア)の意味とは?理由をわかりやすく解説
Pythonのコードを読んでいると、__init__ や __str__ のように、名前の前後にダブルアンダースコア(二重のアンダースコア __)が付いた関数やメソッドを目にすることがあります。これらは「ダンダー(dunder:double underscore の略)メソッド」あるいは「特殊メソッド」「マジックメソッド」と呼ばれるもので、Pythonの言語仕様において特別な意味を持つ名前です。
ダブルアンダースコアはPython側で予約された名前
前後にダブルアンダースコアが付いた名前は、Pythonの組み込み機能(ビルトイン)として実質的に予約されています。これらはクラスの振る舞いをカスタマイズするために、Pythonインタプリタから自動的・暗黙的に呼び出される仕組みになっています。
代表的な特殊メソッドの例
__init__:オブジェクト生成時の初期化処理を定義する__str__:print()などで表示される文字列を定義する__repr__:オブジェクトの公式な文字列表現を定義する__len__:len()関数の戻り値を定義する__eq__:==演算子による比較の挙動を定義する
独自に同じ形式の名前を付けるのは避けよう
このような名前は実質的にPython本体のために確保された領域です。そのため、自分で作成する関数・変数・クラスの属性に同じ形式の名前を付けるのは避けるのが安全です。将来のPythonのバージョンアップで同名の特殊メソッドが新たに追加された場合、意図しない動作や名前の衝突が発生する恐れがあります。
クラス内部でのみ使用する変数を示したい場合は、先頭にアンダースコアを1つだけ付けた _variable 形式を使うのがPythonの公式スタイルガイド(PEP 8)で推奨される慣習です。
まとめ
名前の前後にダブルアンダースコアが付いた __name__ 形式の識別子は、Pythonの組み込み・特殊メソッド向けに予約されたものです。独自のコードでこの形式の名前を新たに作ることは避け、必要に応じてPythonが提供する特殊メソッドを適切にオーバーライドして活用するのが正しい使い方といえます。
-
PythonのLambda関数入門:名前のない匿名関数の基本と使い方
PythonのLambda関数(ラムダ関数)は、1行で記述できる匿名関数です。リストのフィルタリング、文字列の大文字・小文字変換、数値の掛け算など、名前を必要としない単純な処理にLambda式を活用すると、コードを簡潔に保つことができます。 なぜ関数が必要なのか プログラムの中で同じような処理を何度も実行する場合、コードをその都度書き込むのは非効率です。処理の内容を変更したいとき、同じコードが書かれている箇所をすべて修正しなければならず、コードベースが大きくなるほど修正にかかる手間と時間は膨らみます。 そこで役立つのが関数です。Pythonには、素早く関数を宣言できる特別な種類の関数「匿名関
-
CSSの::beforeと::after擬似要素の使い方を実例で解説
CSSの ::before と ::after 擬似要素は、それぞれ対象となる要素の「前」と「後」にコンテンツを挿入するために使用します。これらの擬似要素を使うことで、HTMLを変更することなく、装飾的なテキストや図形などを追加できます。 基本構文 ::before は要素の直前、::after は要素の直後にコンテンツを挿入します。どちらも必ず content プロパティが必要です。空文字列()を指定すれば、テキストではなく装飾用の図形として活用することも可能です。 セレクタ::before { content: 挿入する内容; } セレクタ::after { content: 挿