1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

子供の想像力を伸ばしアイデアを形にする小学生向けプログラミング教室「プロスタキッズ」

Python超入門その20〜演算子をオーバーロードしてみよう〜

Pocket

はじめに

クラスの基本的な定義方法はマスターできましたか?

もう少し応用的なクラスの機能として、コンストラクタのカスタマイズと演算子のオーバーロードがあります。
この機能を使えば、クラスの利便性をさらに高めることができます。
自分でクラスを作成するときに活用できる便利な機能なので、ぜひとも覚えておきましょう。

この記事では、Python初心者の方向けに、クラスのコンストラクタのカスタマイズと演算子のオーバーロードについてお伝えしていきます。

クラスのおさらい

はじめに、前回お伝えしたクラスについて簡単におさらいしておきましょう。

クラスは、次のようにメンバ変数とメソッドを定義できるのでした。

例:

 

この例では、メンバ変数nameとメソッドsetnameおよびsayを定義しています。
このクラスの使い方は、次のようになります。

例:

 

最初に、コンストラクタを呼び出してHelloクラスのインスタンスを変数helloに割り当てています。後はインスタンスに対して、持っているメソッドを呼び出すことができます。
引数selfは渡す必要がないことに注意しましょう。

先程の例では、setnameメソッドを使ってname変数に名前をセットしていましたが、コンストラクタをカスタマイズすれば、この呼び出しを削減できます。
次項で詳しくみていきましょう。

コンストラクタをカスタマイズする

コンストラクタとは、クラスをインスタンス化するために呼び出す関数です。
なにもしなくても、先程の例のように引数なしのコンストラクタが使えます。

Pythonでも、他のオブジェクト指向言語同様にコンストラクタに引数を持たせることができます。
たとえば、次のようにします。

例:

 

コンストラクタをカスタマイズするには、”__init__”という特殊な名前のメソッドを定義します。
アンダーバー(_)が2つであることに注意しましょう。名前が特殊なこと以外は、いたって普通のメソッドです。

例では、setnameメソッドを呼び出して、引数で渡されたnameをセットしています。
このように、メンバ変数でもsetメソッドを経由してアクセスすることで「自己カプセル化」が実現できます。

後は、コンストラクタの呼び出し時に引数を渡してやるだけです。実行すると、先程と同じ結果になります。

演算子のオーバーロード

次に、演算子のオーバーロードについて学んでいきましょう。

オーバーロードは多重定義とも呼ばれ、ここではひとつの演算子に複数の意味(機能)を持たせることを指します。

まずは、よく使う+演算子のオーバーロードをみてみましょう。

例:

 

この例では、数値を表すNumberクラスを定義しています。簡易的なintクラスのようなものですね。

+演算子をオーバーロードするには、”__add__”という特殊な名前のメソッドを定義します。
引数として+演算子の左と右のオブジェクトが渡されてくるため、ここではそれぞれが持っている数値を足し合わせて、新しいNumberインスタンスを返しています。ここで返すオブジェクトが、そのまま+演算子の結果となります。

自分で作ったクラスなのに、まるで数値のように足し合わせることができます。
次に、文字列出力についてみてみましょう。次の例をみて下さい。

例:

 

__str__という特殊な名前でメソッドを定義すると、print関数で出力される文字列をカスタマイズできます。

定義方法は簡単で、単純に文字列を生成して返すだけです。
デバッグ時など、print関数でオブジェクトの内容を確認したいときは多々ありますので、わかりやすい文字列を出力するようにしておきましょう。

まとめ

いまいち使い道がピンとこないでしょうか?

オブジェクト指向を習いたてだと、あまり使い道が思い浮かばないかもしれません。とはいえ、どちらもオブジェクト指向をより豊かにしてくれる機能なので、使い方だけでも頭の片隅に置いておいて下さい。

いずれ、ぴったりの使い道が思い浮かぶでしょう。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

初心者がプログラミングで挫折しない学習方法を無料動画で公開中。オンラインに特化したプログラミングスクール「TechAcademy(テックアカデミー)」が解説。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る