メソッドのローカル変数
メソッドの中で作られた変数は、そのメソッドのローカル変数となる。これは、関数の場合と同様にメソッドのローカルスコープを範囲とする名前空間に属し、生成されてからメソッドの処理が終了するまでの期間存在する。
code:method_local1.py
class Myclass:
def method(self):
x = 2
print('# メソッドを実行しました', x)
m1 = Myclass() # (1):インスタンス「m1」生成
m2 = Myclass() # (1'):インスタンス「m2」生成
m1.method() # (2):呼出し
m2.method() # (2'):呼出し
各インスタンスのmethodメソッド呼び出し (2), (2') において、各メソッドは名前空間を生成し、その中に以下のローカル変数を追加する。
仮引数self ... 意味は後で解説
変数x
下図は、インスタンス(肌色)の中のメソッド(青色)が生成された名前空間を表しており、ローカル変数はこれらが管理する名前空間に所属する様子を示している。関数定義(緑色)は定義文であるため、この中には変数は作られない。(参考:実行文と定義文)
https://scrapbox.io/files/652a3424bf1efa001b5fd9ed.png
あるメソッドに属するローカル変数の「変数名」は、他のメソッドには見えていない。
code:method_local2.py
class Myclass:
def method1(self):
x = 10
print('# method1:', x)
def method2(self):
print('# method2:', x) # (1):エラー
m1 = Myclass() # (2):インスタンス「m1」生成
m1.method1() # (3):呼出し
m1.method2() # (3'):呼出し
(1) においてメソッドmethod2が変数xを利用しようとするが、m1.method2のローカルスコープ、グローバルスコープおよびビルトインスコープのいずれの中にも見つからないのでNameError: name 'x' is not definedを吐いて停止する。(参考:名前解決)
https://scrapbox.io/files/65236d68acb6fe001b190880.png
/icons/hr.icon
※ ブラウザのバックボタンで戻る