(最終更新月:2022年8月)
✔このような方へ向けて書かれた記事となります
「Pythonのクラスとは?」
「Pythonのクラスが全然理解できない!」
「Pythonクラスの使いどころが知りたい!」
✔当記事を通じてお伝えすること
- Pythonのクラスとは?例えていうと何?
- Pythonのクラスは何でできてる?
- Pythonクラスの使い方は?
当記事を最後までご覧いただければ、Pythonのクラスがどんなものかがわかるのはもちろん、具体例や作り方まで全て理解できます。
Pythonのクラスって何?
Pythonは、オブジェクト指向のプログラミング言語です。
オブジェクトとは、「モノ」などと訳すことができ、プログラミングにおいてはデータや処理の集合体のことをいいます。
つまりオブジェクト指向とは、さまざまなデータや処理の集合体を組み合わせて一つのシステムを作り上げるプログラミング言語のことをいいます。
このオブジェクトを作るために必ず必要なのがクラスです。
こちらではそのクラスが何なのかをできるだけわかりやすく解説していきます。
以下のとおり順を追ってご覧ください。
- Pythonのクラスとは?
- Pythonクラスの具体例
- Pythonクラスの使いどころ
Pythonのクラスとは?
Pythonのクラスとは、オブジェクトを作るためのテンプレートです。
例えるなら、
- オブジェクトは、ペッパーくんのようなロボット
- クラスは、そのロボットの設計図
といえるでしょう。
クラス(設計図)では、ロボットの腕・足などパーツや名前・大きさなどの特徴、その機能を定義します。
オブジェクト(ロボット)は、この設計図を元に作られた一台のロボットです。
プログラミングにおいての具体例を見てみましょう。
Pythonクラスの具体例
Pythonクラスがどんなものかをイメージできるよう具体例を紹介します。
挨拶ロボット(オブジェクト)を作るための設計図(クラス)です。
class Greeting():
def morning(self):
print("おはようございます!")
def evening(self):
print("こんばんは!")
ロボットの機能(メソッド)は2つです。
- morningメソッドで、「おはようございます!」を出力
- eveningメソッドで、「こんばんは!」を出力
一台のロボット(オブジェクト)を作ってみます。
greeting_robot = Greeting()
挨拶を実行すると以下のとおりになります。
greeting_robot.morning()
おはようございます!
greeting_robot.evening()
こんばんは!
詳しい作り方はのちほど解説しますが、なんとなくイメージはつきましたでしょうか。
Pythonクラスのメリットや使いどころは?
Pythonクラスのメリットは、一度設計図を作れば何度でも使い回せることです。
そのため使いどころは以下のような場面になります。
- ゲーム制作
- アプリ制作
一場面や一キャラクターごとに動作を定義するのではなく、設計図を元にすればいくつでも同じようなオブジェクトが作れるようになります。
当ブログで紹介しているWebアプリ作成のフレームワーク「Django」も複数のクラスが備わっていて、場面に応じて自由に使えるのが特徴です。
Pythonクラスの作り方をわかりやすく解説
具体例をお見せしましたが、ここでは実際の作り方を丁寧に、わかりやすく解説していきます。
- Pythonクラスの構成
- 属性の定義
- メソッドの定義
- 属性に動的な値を入れる
- 属性の初期値を設定する
ひとつずつご覧ください。
Pythonクラスの構成
Pythonクラスは主に以下の2種類で構成されています。
- 属性:ロボットのパーツや特徴
- メソッド:ロボットの機能
属性やメソッドのない空のクラスも作れます。
class Profile():
pass
新たなクラス「Profile」に属性とメソッドを追加していきましょう。
属性をコンストラクタで定義する
属性は、クラスの特徴やパーツを記録するためにあります。
コンストラクタと呼ばれる特殊なメソッドを使い定義します。
以下のとおりです。
class Profile():
def __init__(self):
self.name = "Yu"
self.age = 38
コンストラクタは「__init__」関数のことで、属性は、「self.属性」で定義していきます。
オブジェクトを作ればいつでも属性にアクセスできるようになります。
>>> me = Profile()
>>> me.name
'Yu'
>>> me.age
38
属性の実行には、メソッドに必要な「()」は不要です。
メソッドを定義する
メソッドは、機能を定義するためのものです。
ここでは自己紹介をするメソッドを作りましょう。
class Profile2():
def __init__(self):
self.name = "Yu"
self.age = 38
def introduce(self):
return f"私の名前は{self.name}です。年齢は{self.age}です。"
メソッド「introduce」を実行してみましょう。
>>> me2 = Profile2()
>>> me2.introduce()
'私の名前はYuです。年齢は38です。'
※メソッドの実行には、「()」が必要です。
属性に動的な値を入れる
さて、いままでの例だと、どのロボット(オブジェクト)でも名前は「Yu」、年齢は「38」になってしまいます。
動的に変える方法として、コンストラクタで引数を受け取る方法があります。
Profile2を書き換えてみましょう。
class Profile3():
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
return f"私の名前は{self.name}です。年齢は{self.age}です。"
コンストラクタで、引数「name」「age」を受け取り、属性に代入しています。
この場合は引数を設定しないとエラーになります。
>>> me3 = Profile3()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
必ず引数に値を入れてください。
>>> me3 = Profile3(name="大谷", age=28)
>>> me3.name
'大谷'
>>> me3.age
28
>>> me3.introduce()
'私の名前は大谷です。年齢は28です。'
属性の初期値を設定する
引数を忘れるたびにエラーが出てしまうのは大変です。
こちらでは初期値を設定しておくことで、万一引数の設定を忘れてもエラーにならない方法をお伝えします。
class Profile4():
def __init__(self, name="イチロー", age=48):
self.name = name
self.age = age
def introduce(self):
return f"私の名前は{self.name}です。年齢は{self.age}です。"
もし引数を設定しなければ自動的に初期値が代入されます。
>>> me4 = Profile4()
>>> me4.introduce()
'私の名前はイチローです。年齢は48です。'
Pythonクラスの使い方
定義したPythonクラスの使い方や中級者向けの作り方をお伝えします。
- インスタンスを作る
- クラスの属性を確認する
- 他クラスを継承する
インスタンスを作る
Pythonのクラスを活用するにはインスタンス化が必要です。
インスタンス化とはオブジェクトを作ること。
以下のように作ります。
インスタンス名 = クラス名()
インスタンス化したうえで属性やメソッドを使えるようになるのです。
クラスの属性を確認する
初めて見たクラスでは、どのような属性やメソッドがあるかわからない場合が多いです。
そんなときは、dirメソッドにインスタンスを渡せば一目瞭然。
>>> me4 = Profile4()
>>> dir(me4)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'introduce', 'name']
「__」で囲まれているのは、クラス全てに備わっている隠しメソッドのようなもの。
独自に設定されている属性やメソッドは、アンダーバーで囲まれていないものになります。
他クラスを継承する
クラスの使い方として、継承はよく使われる方法です。
なぜなら継承を使えば既存のクラスを一から記述することなく、簡単に拡張できるから。
たとえば、Profile4に新たなメソッド「質問返し」を追加してみます。
class ExtendedProfile(Profile4):
def ask_question(self):
return "あなたの自己紹介をお願いします。"
「クラス名(継承元クラス)」とすることで、継承元クラスの属性やメソッドを全て引き継ぐことができます。
インスタンスを作り、実行してみましょう。
>>> instance = ExtendedProfile()
>>> instance.introduce()
'私の名前はイチローです。年齢は48です。'
>>> instance.ask_question()
'あなたの自己紹介をお願いします。'
DjangoなどのWebフレームワークでは多用することになるので、ぜひ覚えておきましょう。
まとめ:クラスはオブジェクトの設計書
当記事の内容をまとめます。
- Pythonのオブジェクトとは、ロボットに例えられる
- Pythonのクラスとは、ロボットの設計書
- Pythonクラスは、属性とメソッドでできている
- Pythonはインスタンス化して使えるようになる
Pythonのクラスは初心者には少しとっつきにくいかもしれません。
ただし一度覚えれば、先人の知恵を借りながらコーディングができる優れもの。
ぜひいろいろと活用し覚えてください。
とくにフレームワークはクラスの塊です。
使い方まで頭に入れておけばスムーズにアプリケーションが作成できることでしょう。
Pythonを独学で勉強したいなら以下の書籍もおすすめです。
Python学習方法をまとめた記事はこちらになります。