Pythonのクラスでは、特殊メソッドと呼ばれるアンダーバー2つで囲まれた特定の名前のメソッドを実装すると、ある処理を実行した際にそのメソッドが自動的に呼び出されます。特殊メソッドとマジックメソッドは、Pythonオブジェクトが特定の演算子や関数とどのように対話するかを定義するためのものです。
class A:
z = 1
def __init__(self, x = 1):
self.x = x
def __call__(self):
return f'call:{self.__class__.__name__}'
def __str__(self):
return f'str:{self.__class__.__name__}'
def __repr__(self):
return f'A(x={self.x})'
def __eq__(self, other):
return self.__dict__ == other.__dict__
上記のクラスA
では、以下の特殊メソッドが定義されています。
__init__
: インスタンス化したときに呼ばれます。__call__
:{インスタンス}()
が{インスタンス}.__call__()
と等価になります。__str__
: インスタンスに対して、インスタンスを’ {インスタンス}’のように文字列として扱った場合の処理を定義できます。__repr__
: 同じ値のオブジェクトを再生成するために必要な文字列を定義するメソッドであり、組み込み関数のrepr
で文字列が得られます。__eq__
:{インスタンスA} == {インスタンスB}
が{インスタンスA}.__eq__({インスタンスB})
と等価になります。
特殊メソッドを使うと、Pythonの組み込みの関数や演算子を独自のクラスで使えるようになります。これにより、クラスの利用がより直感的になり、コードの可読性が向上します。また、特殊メソッドを使うことで、さまざまな処理を簡単に実装できます。
特殊メソッドはPythonのクラス設計において重要な要素であり、その理解と活用はPythonプログラミングの効率と品質を向上させるために不可欠です。この記事が特殊メソッドの理解と活用に役立つことを願っています。