ユーザ定義クラスのインスタンス変数
インスタンスが生成した名前空間に属する変数のことをインスタンス変数という。インスタンス変数は、作られてから、それが属するインスタンスが消滅するまで存在し、インスタンスの内部状態を保持するために用いられる。
以降、インスタンス変数の作り方を解説する。
メソッドの内部から
メソッドの第1引数selfにはインスタンスIDが格納されており、これを用いてインスタンスが管理する名前空間にアクセスできる。(1) code:class61.py
class Myclass:
def set_name(self, a):
self.name = a # (1):インスタンス変数を新規に作る
print(self.name, '-インスタンスに名前を設定しました')
def show_name(self):
print(self.name, '-インスタンス') # (2):インスタンス変数を参照
m1 = Myclass()
m2 = Myclass()
m1.set_name('Taro')
m2.set_name('Hana')
m1.show_name() # 'Taro'インスタンスのインスタンスメソッドを実行
m2.show_name() # 'Hana'インスタンスのインスタンスメソッドを実行
(1) のように作った変数はインスタンス変数となる。
また、(2) のようにするとインスタンス変数の値を取り出すことができる。
https://scrapbox.io/files/652a49734d2a72001cbc3ab8.png
インスタンスm1, m2内のset_name, show_nameおよびインスタンス変数の枠はそれぞれが形成する名前空間を表す。
実際には、インスタンス内のset_name, show_nameメソッドの名前空間(青枠)は呼出された時だけ生成されているが、全体の構成を把握するために全て示している。
クラス定義の外側から
クラス定義の外側からインスタンス変数を利用するには、それが属するインスタンスに割り当てられた変数を利用する。
code:class62.py
class Myclass:
def set(self, a):
self.name = a # (1):インスタンス変数を新規に作る
print(self.name, '-インスタンスに名前を設定しました')
def method(self):
print(self.name, '-インスタンス') # (2):インスタンス変数を参照
m1 = Myclass()
m2 = Myclass()
m1.set('Taro')
m2.set('Hana')
print(m1.name) # (1):'Taro'インスタンスのインスタンス変数nameを参照
print(m2.name) # (2):'Hana'インスタンスのインスタンス変数nameを参照
(1)、(2)において、目的とする変数nameがどのインスタンスに属するのかを変数m1, m2を用いて指定している。
https://scrapbox.io/files/652c83b315d007001c2d5023.png
m1, m2が割り当てられたインスタンスのインスタンス変数にアクセスする様子。
/icons/hr.icon
※ ブラウザのバックボタンで戻る