サイトアイコン ITC Media

【完全版】Pythonクラスとは?使い方までをわかりやすく解説

(最終更新月:2022年8月)

✔このような方へ向けて書かれた記事となります

「Pythonのクラスとは?」

「Pythonのクラスが全然理解できない!」

「Pythonクラスの使いどころが知りたい!」

✔当記事を通じてお伝えすること

当記事を最後までご覧いただければ、Pythonのクラスがどんなものかがわかるのはもちろん、具体例や作り方まで全て理解できます。


筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Pythonのクラスって何?

Pythonは、オブジェクト指向のプログラミング言語です。

オブジェクトとは、「モノ」などと訳すことができ、プログラミングにおいてはデータや処理の集合体のことをいいます。

つまりオブジェクト指向とは、さまざまなデータや処理の集合体を組み合わせて一つのシステムを作り上げるプログラミング言語のことをいいます。

このオブジェクトを作るために必ず必要なのがクラスです。

こちらではそのクラスが何なのかをできるだけわかりやすく解説していきます。

以下のとおり順を追ってご覧ください。

Pythonのクラスとは?

Pythonのクラスとは、オブジェクトを作るためのテンプレートです。

例えるなら、

といえるでしょう。

クラス(設計図)では、ロボットの腕・足などパーツや名前・大きさなどの特徴、その機能を定義します。

オブジェクト(ロボット)は、この設計図を元に作られた一台のロボットです。

プログラミングにおいての具体例を見てみましょう。

Pythonクラスの具体例

Pythonクラスがどんなものかをイメージできるよう具体例を紹介します。

挨拶ロボット(オブジェクト)を作るための設計図(クラス)です。

class Greeting():
    def morning(self):
        print("おはようございます!")
    def evening(self):
        print("こんばんは!")

ロボットの機能(メソッド)は2つです。

一台のロボット(オブジェクト)を作ってみます。

greeting_robot = Greeting()

挨拶を実行すると以下のとおりになります。

greeting_robot.morning()
おはようございます!

greeting_robot.evening()
こんばんは!

詳しい作り方はのちほど解説しますが、なんとなくイメージはつきましたでしょうか。

Pythonクラスのメリットや使いどころは?

Pythonクラスのメリットは、一度設計図を作れば何度でも使い回せることです。

そのため使いどころは以下のような場面になります。

一場面や一キャラクターごとに動作を定義するのではなく、設計図を元にすればいくつでも同じようなオブジェクトが作れるようになります。

当ブログで紹介しているWebアプリ作成のフレームワーク「Django」も複数のクラスが備わっていて、場面に応じて自由に使えるのが特徴です。

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学習方法をまとめた記事はこちらになります。

モバイルバージョンを終了