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

このサイトは、Pythonや生成AIなどを学べるオンラインプログラミングスクール AI Academy Bootcampが運営しています。

はじめに

本記事ではこちら(AI Academy クラスとオブジェクト)のテキストに記載されている内容から「クラス変数」と「インスタンス変数」の解説とそれぞれの違いを解説します。その他の内容も知りたい方は是非読んで見てください。

クラス変数とは

クラス変数とは、すべてのインスタンス間で共通した値をもつ変数です。クラス変数は以下のように、クラス内に定義することで作成できます。

class SampleClass:
    class_val = 'クラス変数'

クラス変数にアクセス(情報を取り出す)するには以下のようにします。

class SampleClass:
    class_val = 'クラス変数'
    
print(SampleClass.class_val) # クラス変数

出力結果

クラス変数

クラス変数にアクセスする①

クラス変数にアクセスするにはクラス名.クラス変数と記述します。クラス変数を変更すると、そのクラスからインスタンス化された全てのインスタンスのクラス変数が変更されます。

class SampleClass:
    class_val = 'クラス変数'
    
print(SampleClass.class_val) # クラス変数

# クラス変数を変更する
SampleClass.class_val = "変更2"
print(sample.class_val) # 変更2

出力結果

クラス変数
クラス変数の値を書き換える

クラス変数にアクセスする②

クラス変数にアクセスするにはクラス名.クラス変数以外にもインスタンス.クラス変数でもアクセスが可能です。

class SampleClass:
    class_val = 'クラス変数'

sample = SampleClass()
print(sample.class_val) # クラス変数にアクセス

出力結果

クラス変数

しかし、この記述方法ではクラス変数を直接書き換える事は出来ません。

class SampleClass:
    class_val = 'クラス変数'

sample = SampleClass()

sample.class_val = "クラス変数2"
print(sample.class_val) # クラス変数2
print(SampleClass.class_val) # クラス変数

出力結果

クラス変数2
クラス変数

また、インスタンス.__class__.クラス変数として、クラス変数にアクセスする事もでき、この時にクラス変数の値を書き換えたい場合は以下のよう記述する事が出来ます。

sample.__class__.class_val = "クラス変数の値を書き換える"
print(SampleClass.class_val) # クラス変数の値を書き換える
print(sample.class_val) # クラス変数の値を書き換える

出力結果

クラス変数の値を書き換える
クラス変数の値を書き換える

インスタンス.__class__.クラス変数の書き方で値を上書きした場合、別のインスタンスのクラス変数の値は全て共通した値を持ちます。

class SampleClass:
    class_val = 'クラス変数'

sample = SampleClass()
sample2 = SampleClass()

sample.__class__.class_val = "クラス変数の値を書き換える"

print(SampleClass.class_val)
print(sample.class_val)
print(sample2.class_val)

出力結果

クラス変数の値を書き換える
クラス変数の値を書き換える
クラス変数の値を書き換える

クラス変数以外に次のセクションで説明するインスタンス変数と呼ばれる変数もあります。インスタンス変数とは今の段階ではそのインスタンスだけで利用できる属性とお考えください。

🎁ちょっとひと息 ! 業務や学習に役立つライブラリーをプレゼント !

オンラインプログラミングスクールのAI Academy Bootcamp LINE公式のライブラリーでは無料動画、講座、最新技術資料など、学習や業務に役立つ秀逸な教材や実践的なリソースを豊富に取り揃えています!毎週新しいコンテンツも更新中です。LINE友だち登録でプレゼントします。ぜひご活用ください!

LINE Libraryで人気 の動画です。

倍速で学ぶ!生成AIを活用したプログラミング勉強法】 生成AIを活用して効率的にプログラミングを学ぶ方法を解説しています。生成AIの基本的な仕組みや効果的な活用法、注意点についても詳しく説明。勉強法とともに生成AIそのものについても学べる内容となっています。ぜひご覧ください!

インスタンス変数とは

インスタンス変数は、個々のインスタンスに格納される変数のことです。インスタンス変数のサンプルプログラムを例に理解を深めていきましょう。ここではUserクラスを作っていきます。

class User:
    # 実行順②
    def __init__(self, name): # インスタンス化されて渡ってくる値を受ける変数を定義します
        # インスタンス変数(属性の初期化)
        self.name = name # 実行順③
        print("コンストラクタが呼ばれました") # # 実行順④

    def hello(self):
        print("Hello " + self.name)
        
user = User("Sample User") # userというインスタンスを生成しています。 実行順①

今回定義したUserクラスのコンストラクタはnameという引数を取り、その引数で変数であるself.name(この変数のことをインスタンス変数と呼びます)を初期化しています。インスタンス変数は、個々のインスタンスに格納される変数のことですので、ここでは5行目のnameがインスタンス変数です。8行目に定義したhelloメソッド内9行目で、selfの後ろに属性名nameを書いていますが、このように.インスタンス変数名と書くことで、インスタンス変数の作成及びアクセスができます。

インスタンス変数にアクセスする

インスタンス変数にアクセスするには、インスタンス名.インスタンス変数と記述します。

user = User("Sample User")
py = User("python")

user.hello() # Hello Sample User
py.hello() # Hello python

出力結果

コンストラクタが呼ばれました
コンストラクタが呼ばれました
Hello Sample User
Hello python

Pythonを効率よく学ぶには?

Pythonの基本文法やデータ分析の基礎や統計学基礎などの講座はAI Academyの無料アカウントに登録することで、購読可能です。

AI Academy BootcampではAI・データサイエンス、機械学習の実践力を高める全4コース40時間以上の動画が見放題!AIの学習に必須のPythonの学習から始まり、データサイエンス・機械学習など、目的に応じた幅広い分野をカバーしています。

無料講義や無料動画を試して頂いて、ご受講をご検討頂けましたら幸いです。