• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Python / Pythonのクラス変数とインスタンス変数の使い分けについて

Pythonのクラス変数とインスタンス変数の使い分けについて

1 クラス変数とインスタンス変数
2 クラス変数について
3 インスタンス変数について
4 クラス変数とインスタンス変数についてまとめ
5 関連記事

クラス変数とインスタンス変数

pythonはオブジェクト指向言語で、プロパティにデータを格納することができる。
プロパティには、クラス変数とインスタンス変数がある。

ここでは、クラス変数とインスタンス変数の違いについて説明する。

クラス変数について

クラス変数は、クラスが所有する変数で作成されたすべてのインスタンス間で共有される。
コードを実行して、クラスが読み込まれたされた際にクラス変数が宣言される。
以下のように定義する


class Person:
name = 'Hoge' # クラス変数

また、アクセスする場合には以下のようにクラス名.変数名とすればよい。

Person.name

上の例では、Personクラスにnameをクラス変数として持たせている。

Example

  • クラス変数へのアクセス、変更
class Coffee:
    name = "Espresso"

print(Coffee.name) # クラス変数にアクセス(Espressoと表示)
Coffee.name = "Americano" # クラス変数を変更
print(Coffee.name) # Americanoと表示

また、インスタンスを作成してから、

instance.variable

として、クラス変数にアクセスすることもできる。

ただしこの方法では、クラス変数を直接書き換えることはできない

instance.variable = "〇〇"

として値を書き換えた場合、クラス変数とは別のメモリ上の位置にデータが格納される

Example

  • インスタンスからクラス変数へアクセス
class Coffee:
   name = "Espresso"

c1 = Coffee() # インスタンス作成
print(c1.name) # Espresso
c1.name = "Americano" # 値を変更(クラス変数Coffee.nameとは異なるメモリ上に格納される)
print(c1.name) # Americano
print(Coffee.name) # Espresso

また、

instance.__class__.変数名

としてもクラス変数にアクセスすることができる。

Example

  • インスタンスからクラス変数へアクセス
class Coffee:
    name = "Espresso"

c1 = Coffee() # インスタンス作成
print(c1.__class__.name) # Espresso
c1.__class__.name = "Americano" # クラス変数の値を変更
print(c1.__class__.name) # Americano
print(Coffee.name) # Americano

インスタンス変数について

インスタンス変数は、クラスから作成されたインスタンスが持っている変数である。
属しているインスタンスに応じて、インスタンス変数の値は異なる。
また、インスタンス変数はメソッド内に記述して利用する。


class Order:
    def __init__(self, name, price):
        self.name = coffee_name
        self.price = price

上の例では、nameとpriceがインスタンス変数である。

インスタンス変数は以下のように利用する

Example

  • インスタンス変数へアクセス

class Human:
    msg = "Hello" # クラス変数です。インスタンス間で共有される

    def __init__(self, name, age):
        self.name = name
        self.age = age
        # インスタンス変数、コンストラクタ呼び出しの時に初期化

    def print_msg(self):
        print("{} name = {}, age = {}".format(self.msg, self.name, self.age))

taro = Human("Taro", 20)
jiro = Human("Jiro", 18)

print(taro.msg) # クラス変数msgにアクセス、「Hello」と表示
print(jiro.msg) # クラス変数msgにアクセス、「Hello」と表示

print(taro.name) # インスタンス変数nameにアクセス、「Taro」と表示
print(jiro.name) # インスタンス変数nameにアクセス、「Jiro」と表示

print(Human.msg) # クラス変数は、クラス名.変数名でアクセス可能
Human.msg = "Hi" # クラス変数を変更

print(taro.msg) # クラス変数msgは共有されており、変更されたため「Hi」と表示
print(jiro.msg) # クラス変数msgは共有されており、変更されたため「Hi」と表示

taro.__class__.msg = "GoodBye" # クラス変数は、インスタンス名.__class__.変数名でアクセス可能

print(taro.msg) # クラス変数msgは共有されており、変更されたため「GoodBye」と表示
print(jiro.msg) # クラス変数msgは共有されており、変更されたため「GoodBye」と表示

クラス変数とインスタンス変数についてまとめ

以上
クラス変数は、クラスの直下に定義されすべてのインスタンスから参照すると同じ値を得ることができる。
このようにクラス変数はインスタンス間で共有される。
インスタンス変数は、インスタンス毎に設定してそれぞれ値を入れることができる。

クラス変数
  • オブジェクト同士で共有する変数
  • メソッドの内部でなく、クラスの直下に記載
インスタンス変数
  • インスタンスごとに別々に利用する変数
  • メソッドの内部に記載

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
【まとめ】よく使うLinuxのショートカット11選
【まとめ】よく使うLinuxのショートカット11選
覚えておくべきLinuxコマンド50選
覚えておくべきLinuxコマンド50選
FlaskでFormを用いてPOSTリクエストを行い、送信された値を取得する
FlaskでFormを用いてPOSTリクエストを行い、送信さ…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 クラス変数とインスタンス変数
2 クラス変数について
3 インスタンス変数について
4 クラス変数とインスタンス変数についてまとめ
5 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Python講座
【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。<strong>Pythonの基礎から生成AI活用</strong>...
詳細 ▶

Footer

利用規約