なぜ一部の関数には関数名の前後にアンダースコア__が付いているのか?

PYTHON3 チュートリアル

Pythonでの関数名にアンダースコア”__”が付く理由

Pythonにおいて、関数名の前後にアンダースコア”__”が付くと、その関数は特殊な用途のために定義された”マジックメソッド”として扱われます。これらの特殊メソッドは、Pythonの様々な機能や振る舞いをカスタマイズするために使用されます。

関連する知識

Pythonのクラスにおいて、特殊メソッドはダンダーメソッドとも呼ばれ、通常のメソッドとは異なる特別な構文を持ちます。これらの特殊メソッドを適切に実装することで、Pythonの組み込み関数や演算子などがクラスオブジェクトに対して適切に動作するようにすることができます。

明確な例

class MyClass:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return f"MyClass instance with value: {self.value}"

obj = MyClass(42)
print(obj)  # Output: MyClass instance with value: 42

結果

上記の例では、`__str__`メソッドをオーバーライドすることで、`print(obj)`が`MyClass instance with value: 42`という文字列を表示するようになります。このように、特殊メソッドを使用することで、Pythonの様々な機能をカスタマイズできます。

さらなるサンプルコード

以下に、`__add__`メソッドを使用して二つのオブジェクトを加算する例を示します。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

p1 = Point(1, 2)
p2 = Point(3, 4)
result = p1 + p2
print(result.x, result.y)  # Output: 4 6

この例では、`__add__`メソッドを実装することで、`p1 + p2`が新しい`Point`オブジェクトを作成し、その座標を加算した結果を返すようになります。

アンダースコア”__”が関数名の前後に付いている関数は、通常、Pythonの特殊な機能や構造を表すために使用されます。これらの関数は通常、Pythonの内部で使用されるため、一般的なユーザーが直接使用することは推奨されません。

例えば、__init__()という関数は、クラスのコンストラクタとして使用され、オブジェクトが作成される際に自動的に呼び出されます。また、__str__()関数は、オブジェクトを文字列に変換する際に呼び出される特殊メソッドです。

アンダースコアが関数名の前後に付いていることは、その関数がPythonの特殊な機能を持つことを示しています。これらの関数は通常、Pythonの標準ライブラリやフレームワークで使用され、開発者が自分で定義することは稀です。

購読
通知
0 Comments
Inline Feedbacks
View all comments