はぴまるのおすすめキーボード Keychron K3 Max

初心者のためのPython基本講座:【第20回】クラスとは?関数との違いも合わせて解説

当ページのリンクには広告が含まれている場合があります。

「クラスって何?どうやって使うの?」「クラスと関数って何が違うかわからない!」という疑問や悩みを持っていませんか?

そんな悩みや疑問を解消できるように、この記事ではPythonのクラスについて解説しています。

「初心者のためのPython基本講座」とは

この講座は、これからPythonを学ぼうとする初心者の方がPythonの基本を学ぶための講座です。

Pythonの代表的な構文の使い方を具体的なコードを例にして解説しています。

この記事は、以下のような方におすすめ!
Pythonのクラスについて知りたい方
Pythonのクラスと関数の違いがわからない方

クラスを扱えるようになると、同じような属性を持つデータのまとまりを複数扱う際にとても便利です。

この記事を読めば、Pythonのクラスを理解でき、プログラムで扱えるようになります!

Pythonの基本をマスターして、Pythonプログラマーとしての一歩を踏み出しましょう!

目次

前回の振り返り

前回の記事では、Pythonの変数スコープについて解説しました。

複数の関数やモジュールで同じ変数を扱う際に変数のスコープはとても重要です。

変数スコープについて自信がない方は、

こちらの記事もチェックしておくことをおすすめします!

今回のゴール

では、改めて今回のゴールを確認しましょう。

今回のゴールは、クラスやインスタンスについて理解し、実際に動作を確認することです。

クラスは扱えるようになるととても便利ですが、ある程度なれが必要です。

ぜひこの機会に手を動かして感覚を掴みましょう!

クラスとは

クラスとは、データとメソッドを一つの単位としてまとめた型やテンプレートのようなものです。

クラスはデータ(属性)とメソッドをカプセル化しオブジェクトとして扱えるので、

複数のオブジェクトを生成してデータの管理がしやすいんですね。

一方、関数は、特定のタスクを実行するための独立したコードで、何度も呼び出すことはできますが、

関数ないにデータを保持することはありません。

クラスを定義する

早速クラスを定義してみましょう。

クラスは、class キーワードを使用して定義されます。

クラスの内部には、メソッド(関数)と属性(変数)を定義できます。

簡単な例ですが、クラスの定義は以下のように記述します。

ほとんど関数の定義と似ていますね。

selfというのは、インスタンスを生成した際のインスタンス自身を指します。

class SampleClass:
    """This class is sample."""
    #クラス変数
    val = 123

    #メソッド
    def m(self):
        return self.val

上記で示しているクラス変数は、本記事の下部で説明していますが、

クラス内で共有される変数になり、インスタンス変数とは別物です。

クラスのインスタンスを生成する

クラスは、クラスからインスタンスを生成して扱います。

インスタンスというのは、クラスが型だとするなら、型から作られた実態です。

初めてクラスに触れる方はイメージしづらいと思いますので、コードで動きを見てみてください。

以下の例で、SampleClassというクラスから、a1, a2というSampleClassのインスタンスを生成して、

それぞれのメソッドを実行しています。

class SampleClass:
    """This class is sample."""
    #クラス変数
    val = 123

    def m(self):
        return self.val

if __name__ == '__main__':
    a1 = SampleClass()
    a2 = SampleClass()
    print('a1:', a1.m())
    print('a2:', a2.m())
a1: 123
a2: 123

インスタンス変数を初期化する

インスタンス変数というのは、インスタンス内で扱われる変数で、

クラス変数とは違い別のインスタンスとは共有されない変数になります。

以下のようにdef __init__(self)というメソッドを定義することで初期化することができます。

class SampleClass:
    """This class is sample."""
    def __init__(self):
        self.val = []
    
    #クラス変数
    val = 123

    def m(self):
        return self.val

if __name__ == '__main__':
    a1 = SampleClass()
    a1.val.append('b1')
    a2 = SampleClass()
    a2.val.append('b2')
    print('a1:', a1.val)
    print('a2:', a2.val)
a1: ['b1']
a2: ['b2']

もう一つ初期化の例を見てみましょう。

以下のように記述すると、インスタンスを生成すると同時にインスタンス変数を初期化できます。

class AnyVal:
    def __init__(self, val1, val2):
        self.x = val1
        self.y = val2

if __name__ == '__main__':
    a1 = AnyVal(5, 10)
    a2 = AnyVal(11, 13)
    print('a1x:', a1.x)
    print('a1y:', a1.y)
    print('a2x:', a2.x)
    print('a2y:', a2.y)
a1x: 5
a1y: 10
a2x: 11
a2y: 13

クラス変数とインスタンス変数の違い

クラス変数とインスタンス変数は異なります。

それぞれ、影響を及ぼす範囲が異なりますので一緒に確認していきましょう!

クラス変数

クラス変数は、クラス内で利用される変数のことです。

クラス変数の値を変更した場合は、その値の変更がインスタンス内で共有されます。

インスタンス変数

インスタンス変数は、インスタンス内で利用される変数のことです。

インスタンス変数は、インスタンス内で閉じるので、

インスタンス変数を変更しても他のインスタンスに影響を及ぼしません。

変数の違いを具体的に確認

変数の違いについては、具体的に確認していきましょう。

class SampleClass:
    """This class is sample."""
    val = 123  # クラス変数

    def __init__(self):
        self.basket = []  # インスタンス変数

    def m(self):
        return self.val


if __name__ == '__main__':
    # インスタンスを生成
    a1 = SampleClass()
    a2 = SampleClass()
    # インスタンス変数の値を変更
    a1.basket.append('apple')
    a2.basket.append('orange')
    print('インスタンス変数の値を確認')
    print('a1:', a1.basket)
    print('a2:', a2.basket)

    print('インスタンス変数valを定義して値を代入')
    a1.val = 456
    print('a1:', a1.val)
    a2.val = 789
    print('a2:', a2.val)

    print('クラス変数を変更して、値を確認')
    SampleClass.val = 100
    print('クラス変数:', SampleClass.val)

    print('インスタンス変数を削除して、クラス変数の値を確認')
    del a1.val
    del a2.val
    print('a1のクラス変数:', a1.val)
    print('a2のクラス変数:', a2.val)
    print('クラス変数:', SampleClass.val)

    print('クラス変数の値を変更して、それぞれのクラス変数を確認')
    SampleClass.val = 1000
    print('a1のクラス変数:', a1.val)
    print('a2のクラス変数:', a2.val)
    print('クラス変数:', SampleClass.val)
インスタンス変数の値を確認
a1: ['apple']
a2: ['orange']
インスタンス変数valを定義して値を代入
a1: 456
a2: 789
クラス変数を変更して、値を確認
クラス変数: 100
インスタンス変数を削除して、クラス変数の値を確認
a1のクラス変数: 100
a2のクラス変数: 100
クラス変数: 100
クラス変数の値を変更して、それぞれのクラス変数を確認
a1のクラス変数: 1000
a2のクラス変数: 1000
クラス変数: 1000

上記の挙動から、クラス変数はインスタンス間でも共有され、インスタンス変数は共有されない挙動が確認できると思います。

また、インスタンスを生成したのちに、クラス変数と同名のインスタンス変数を定義すると、

取得できる値がクラス変数の値ではなく、インスタンス変数の値に変わる点が注目ですね!

まとめ

今回の記事では、Pythonのクラスやインスタンスついて解説しました。

今回のポイントをまとめると、次のとおりです。

まとめ
  • クラスはデータとメソッドを一つの単位としてまとめた型やテンプレートのようなもの
  • クラスはインスタンスを生成して操作する
  • クラス変数とインスタンス変数では影響範囲が異なる

Pythonのクラスを理解し、複数の同じような属性を持つデータを扱いやすくなったのではないでしょうか。

Pythonのクラスを扱えば、コード量も大幅に削減することができます。

ぜひこの記事を参考にして、Pythonのクラスをマスターしてください!

以上、最後までお読みいただきありがとうございました。

未経験からのITエンジニア転職に挑戦したい方へ

転職も含めて真剣にプログラミングスキルを手に入れたいとお考えの方に、おすすめの方法をご紹介します。

結論から言うと、それは転職活動とスキル学習を同時に進める方法です!

同時に進める理由は、転職成功までの時間を短縮するためなんですが、

でも昼間は学校や本業もあるのに、転職活動と学習を同時にって無理!

って思いますよね?

そんな忙しい方には、スキル学習と転職サポートが一体となているがオススメ!

しかも、学習サポートも転職サポートも無料で利用できます!

ウズカレITはITスクールのを運営する企業uzuzのサービスだから

体系的かつ総合的に学習サポートを受けることができます。

ITエンジニアはまだまだ売り手市場で、未経験可の求人もたくさんあります。

一度、ウズカレITの無料相談で不安に思ってることなどを相談してみるのがオススメです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次