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 を介してアクセス |
優先順位
関数やクラスメソッド内での優先順位は以下の通りです:
ローカル変数 > クラス変数 > グローバル変数