具体例で学ぶ、Pythonのclassの使い方


Pythonではclassを活用してプログラミングができます。
しかしclassの概念は初学者には理解が難しく、
・何のためのものかイメージしづらい
・どういうときに使いたいものなのかイメージしづらい
と感じている方も多いのではないでしょうか。

そこで本記事では、
・クラスとはどういうものか
・どういうときに使うものなのか
について説明し、具体的な使い方をコードを交えて解説します。
少しでもイメージしやすいように、具体的な使用イメージがわくようなコード例、丁寧なコメントによる、初学者でも理解しながら実行できるコード例を心がけています。
ぜひ手元で実行しながら、できれば少しずつでもコードを改造しながらお読みいただけますと幸いです。

 

 

classとは

 

classを使用すると、関数を定義するときのように複数の処理や値をまとめておくことができます。
classからは「インスタンス」というものが作成でき、インスタンスにはデータを保持させておくことができたり(属性)、関数のように処理をまとめておくことができたり(メソッド)します。
このように、「1つのもの(オブジェクト)に情報や処理をひも付けて管理できる」のがclassです。

例えば、「人間」というclassがあるとしましょう。
人間classをひな形として1人1人の個人が作られます。
この人間インスタンスにはそれぞれ共通する
・属性:名前や年齢、性別、お腹の空き具合
・メソッド:食べる、寝る
などの項目が設定されている、というイメージです。

classを作成しておくことで、似たようなインスタンスを自由に生み出すことができます。
そのため、classはインスタンスを作成するための「ひな形」「設計図」「工場」などとも言われます。

classの「継承」という機能を使うことで、とあるclassから派生したclassを作ることも簡単にできます。
例えば、「人間」classを拡張した「大人」classでは、「人間」classで設定した属性、メソッドに加えて
・属性:年収、仕事、趣味、好きなもの
・メソッド:歩く、走る、話す、働く
などを追加することができます。

このように、classを活用すれば
・似たようなコードを繰り返し書く必要がなくなる
・コードを再利用しやすい
・機能を拡張しやすい
という恩恵が得られます。

 

 

classはどんなときに必要なのか

 

classはPythonを始めたばかりのころはあまりお世話にならないかもしれません。
そのため
「classを使わなくてもプログラミングできてる。classって何に使うんだろう…。」
と疑問に思うことでしょう。

classは「対象となる物」を作成し、対象物に関する情報や動きをひとまとめにして使い回すことができます。
classが必要になる場面としてイメージしやすいのはゲーム制作です。
ゲームでは登場人物や敵キャラ、使用する道具などさまざまなものが登場します。
これら全て、固有の情報や動き方、使い方が備わっているため、それぞれの共通部分をclassにすることでコーディングが効率的になります。

このように、多様なものをたくさん用意する必要がある場合にclassが威力を発揮します。
そのため、ゲーム以外にも、何かしらの対象物を作成して扱う必要があればclassを活用できるでしょう。

また、Pythonでいつもお世話になっているrandomやpandasなどといったモジュールでもクラスが活用されています。大規模な開発では、classを使用できるに越したことはないのです。

 

 

Pythonにおけるclassの具体的な使い方

 

それでは、具体例を元にPythonでのclassの使い方を見ていきましょう。
今回はゲームの登場キャラクターのひな形になるclassを作成してみます。
キャラクター共通の機能を持ったCharacterクラス、Characterクラスに追加機能を付けた「村人」(Villager)、「自キャラ」(Hiro)のclassを作成してみます。

 

classの作り方

 

まずはCharacterクラスを作成します。
属性やメソッドを設定していないclassは以下のようになります。
なお、class名は大文字で開始し、単語を繋げるときはCharacterClassのように各単語の頭文字を大文字にします。

これでCharacterクラスの定義ができました。
実際にCharacterインスタンスを作成するには

とclassを変数に代入すればOKです。

 

classの属性

 

キャラクターには「名前」(name)、「年齢」(age)、「性別」(sex)という属性を付けることにします。
属性は以下のように設定できます。

chara1.nameという変数に値を代入したようなものなので、以下のように値を使用することもできます。

出力

別のインスタンスには別の値を設定できます。

出力

ここまでではclassのありがたみはまだ感じられませんが、これから少しずつclassの利点が見えてきます。

 

classのメソッド

 

classにはメソッドを定義することもできます。
関数と同じくdef文を使用しますが、第1引数に「self」というオブジェクトを指定しておく点が特徴的です。

selfはその名の通り「メソッドを呼び出したインスタンス自身」を指します。
インスタンスを表す変数名はさまざまですが、それらを共通してselfとして表現しています。
「メソッドの引数に自分自身を入れることで、自分自身に設定されている属性の値を利用できる」というイメージです。

実際の使い方を見た方が早いですので、以下で「名前」(name)、「年齢」(age)、「性別」(sex)という属性を設定するメソッド(set_data(self, name, age, sex))、これらの情報をprintするメソッド(print_data(self))を設定してみましょう。

これらのメソッドを使用すれば、属性の説明の例で見たような手間をかけず、一括で必要な属性に値を設定できます。
なお、メソッドを実行する際にはselfを引数に指定せず、第2引数から指定します。

def set_data(self, set_name, set_age, set_sex): 内でselfにメソッドを呼び出したインスタンス自身(chara3)が代入されて self = chara3 となっています。
後の引数は関数と同様にそれぞれの変数に代入され、

となっているわけです。

もう1つのメソッドを実行すると

出力

となり、しっかりと属性が設定され、呼び出しもできることが確認できます。

なお、属性から直接値を呼び出すこともできます。

出力

 

classのインスタンスを作成する際に呼び出されるメソッド

 

各インスタンスそれぞれに属性を設定する機会は多く、いちいち設定するのも面倒です。
そんな面倒さを解消できるように、classにはインスタンス作成時に自動で呼び出されるメソッド(__init__())を定義することができます。
このメソッドは「コンストラクタ」と呼ばれます。

使い方は以下の通りです。
以下コードはメソッドの説明で定義したset_dataメソッドを__init__に変更しただけのものです。

__init__()の引数は以下のようにインスタンス作成時に指定します。

出力

 

継承

 

classの便利な点はコードの使い回しがしやすい点、機能拡張がしやすい点です。
「継承」という機能を利用することで、他で作成したclassのメソッドや値を受け継ぎつつ、メソッド等を編集、追加できます。
定義するclass名の後ろに継承したいclass名を()内に指定すればOKです。

まずは村人(Villager)classを作成してみましょう。
村人にはCharacterクラスの機能に加え、台詞(line)を属性として持ち、台詞を話すspeak()メソッドも定義します。

Villagerクラスでは、Characterクラスのコンストラクタに台詞の設定も追加しています。
このように、super()で継承元のクラスを呼び出せます。

インスタンスを作成してみると

出力

また、Characterクラスを継承しているので、Villagersクラスで定義していないprint_data()メソッドも呼び出せます。

出力

これで村人を大量生産できますね。

同様に、自キャラ(Hiro)classも作成してみましょう。
自キャラにはCharacterクラスの機能に加え、体力(hp)と経験値(ex)、魔力(mp)を属性として持たせます。
また、魔力に応じて体力を回復するheal()メソッドも定義します。

インスタンスを作成してみると

出力

出力

このように、共通する機能を持つclassを作成し、classを継承した新しいclassを作成することで機能を追加することができます。

 

 

classを使いこなして一段上のPython使いに

 

クラスの使い方を具体例とともに解説しました。
ここで解説した使い方はごく基本的なものですが、一歩を踏み出しておけば応用も理解しやすいでしょう。
小規模なソースコードでは活用するタイミングは無いかもしれませんが、classを使いこなせればできることが増えそうだと感じていただけたのではないでしょうか。

classは「習うより慣れろ」だと言われます。使えそうな場面を見つけ、classの使い方を調べながら積極的に活用してみましょう。

 

▽関連記事はこちら

Python、クラスや関数へのコメントの書き方

PythonでGUIアプリをつくる!おすすめのライブラリーとは

 

 

株式会社キャパでは、アプリの企画・開発についてご相談を承っています。
「アプリを作りたいので、具体的な提案が欲しい。」
「頭の中にあるアイデアを本当に実現できるのか知りたい。」
「予算内に収まるのか?」
などのお客様のご相談に、親身に応じます。

アプリ開発:実績のご紹介


関連記事一覧

we love develop
アプリやシステムの開発を通じて、お客様のビジネスを成長させることが私たちのビジネスです。お気軽にお問い合わせください。
 お問い合せ

お電話でのお問い合わせはこちらから
TEL:03-5297-2871

メールマガジンの登録

キャパでは誰かに話したくなるようなIT小ネタを、週に一回メルマガで配信しています。
ぜひ購読してみませんか?
 購読する

ホワイトペーパーの入手

ITブログ月間20万PV達成!自社オウンドメディアの運用ノウハウを無料公開しています。
 ダウンロード

記事カテゴリ記事カテゴリ

月別投稿記事

PAGE TOP