
self
に戻る
属性名の前に「
self
」を付ける
前ページに示したこの関数が、呼び出すと何らかの処理をして値を返すのであれば
問題ありません。通常は、関数の戻り値だけが問題となり、関数内で使う変数は問題
となりません。
関数が終了すると変数が破棄されることがわかったので、クラスで変数を使って属
性値を記録しようとするとこの正しくないコードが問題を引き起こしそうだと思いま
せんか?
メソッドは関数の別名なので、
increase
を次のように書くと
increase
の呼び出し後は
val
も
incr
も破棄されています。
class CountFromBy:
def increase(self) -> None:
val += incr
しかし、メソッドはオブジェクトに属する属性値を使うので状況が異なります。オ
ブジェクトの属性はメソッドの終了後も存在しています。つまり、オブジェクトの属
性値はメソ
ッドが終了しても破棄されません。
メソッドが終了しても値を保持するためには、メソッドが終了しても破棄されない
ものに属性値を代入しておきます。この代入しておくものがメソッドを呼び出す現在
のオブジェクトで、
self
に格納されています。したがって、下のようにメソッドコー
ドでは属性値の前に
self
を付ける必要があるのです。
class CountFromBy:
def increase(self) -> None:
self.val += self.incr
self
を使うと
val
と
incr
が
オブジェクトに対応付け
られます。この方が ...