
__init__
は魔法
324
8
章
あの時は、すべてのダンダーを無視するように言いました。ここでその理由を明らかにし
ましょう。ダンダーはクラスの標準的な振る舞いにアクセスできるようにするものです。
オーバーライドしない限り、この標準的な振る舞いはクラス
object
で実装されていま
す。
object
クラスはインタプリタに組み込まれているので、他のすべてのクラス(自分の
書いたクラスも含む)は自動的に
object
クラスを継承します。これは
OOP
用語で言うと、
object
が提供するダンダーメソッドをクラスでそのまま利用したり、または(独自の実装
を提供することで)必要に応じてオーバーライドできるということです。
必要がなければ、
object
メソッドをオーバーライドしなくても構いません。しかし、例
えばクラスから生成したオブジェクトを等価演算子(
==
)と一緒に使う場合の動作を指定し
たい場合には、
__eq__
メソッドの独自のコードを書きます。オブジェクトを大なり演算子
(
>
)と一緒に使う場合の動作を指定したい場合には、
__ge__
メソッドをオーバーライドし
ます。また、オブジェクトに関連する属性を初期化したいときには、
__init__
メソッドを
使います。
object
が提供するダンダーはとても便利で、特殊メソッドと呼ばれます。
つまり、下のような
def
行を使ってクラスでメソッドを定義すると、クラスから新たな
オブジェクトを生成するたびにインタプリタはこの
__init__
メソッドを呼び出します。
この