0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonにおけるローカル変数、グローバル変数、クラス変数、インスタンス変数の違い

Last updated at Posted at 2024-11-28

1.ローカル変数

  • 定義場所: 関数やメソッドの内部で定義される
  • スコープ: 定義された関数やメソッド内でのみ有効。他の関数やメソッドからはアクセスできない
  • 特徴: 関数が終了するとメモリから削除される
def example_function():
    local_var = "これはローカル変数です"
    print(local_var)

example_function()  # 出力: これはローカル変数です

2.グローバル変数

  • 定義場所: 関数やクラスの外部で定義される
  • スコープ: モジュール内で有効。(つまり、そのグローバル変数が定義されたファイル内)
  • ただし、関数内で値を変更する場合は global キーワードが必要
  • 特徴: プログラムが終了するまで保持される
global_var = "これはグローバル変数です"

def example_function():
    print(global_var)

example_function()  # 出力: これはグローバル変数です

3.クラス変数

  • 定義場所: クラスの内部、メソッドの外部で定義される
  • スコープ: クラス全体で共有され、全てのインスタンスで共通の値を持つ
  • 特徴: インスタンスごとに異なる値を持たず、クラス全体で値を共有する
class SampleClass:
    class_var = "クラス変数"  # クラス変数

print(SampleClass.class_var)  # 出力: クラス変数

4.インスタンス変数

  • 定義場所: 各インスタンスごとに保持される変数で、通常 __init__ メソッド内で定義される
  • スコープ: 各インスタンス内
  • 特徴:インスタンスごとに異なる値を持つ。self.変数名でアクセス可能
class SampleClass:
    def __init__(self, value):
        self.instance_var = value  # インスタンス変数

obj1 = SampleClass("インスタンス1")
obj2 = SampleClass("インスタンス2")

print(obj1.instance_var)  # 出力: インスタンス1
print(obj2.instance_var)  # 出力: インスタンス2

クラス変数とインスタンス変数の相違点

class ExampleClass:
    class_var = "クラス変数"

example_instance1 = ExampleClass()
example_instance2 = ExampleClass()

# クラス変数のアクセス
print(example_instance1.class_var)  # 出力: クラス変数
print(example_instance2.class_var)  # 出力: クラス変数

# クラス変数の変更
ExampleClass.class_var = "インスタンス変数"
print(example_instance1.class_var)  # 出力: 変更されたクラス変数
print(example_instance2.class_var)  # 出力: 変更されたクラス変数

# インスタンス変数の上書き
example_instance1.class_var = "インスタンス変数で上書き"
print(example_instance1.class_var)  # 出力: インスタンス変数で上書き
print(example_instance2.class_var)  # 出力: 変更されたクラス変数

# クラス変数の再変更
ExampleClass.class_var = "再変更されたクラス変数"
print(example_instance1.class_var)  # 出力: インスタンス変数で上書き
print(example_instance2.class_var)  # 出力: 再変更されたクラス変数

まとめ

種類 定義場所 有効範囲 特徴
ローカル変数 関数やメソッド内 定義された関数の内部 外部からアクセス不可、関数終了時に破棄される
グローバル変数 関数やクラスの外部 モジュール内 任意のスコープからアクセス可能、変更には global 必須
クラス変数 クラス内 クラスおよび全インスタンス クラスで共有され、インスタンスごとに同じ値を持つ
インスタンス変数 __init__ 等のメソッド内 各インスタンス インスタンスごとに異なる値を持ち、self を介してアクセス

優先順位

関数やクラスメソッド内での優先順位は以下の通りです:
ローカル変数 > クラス変数 > グローバル変数

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?