
self ==
オブジェクト
self
の重要性
increase
メソッドでは、ブロック内のクラスの各属性の前に
self
を付けています。
なぜこのようになるのか考えるように言われました。
class CountFromBy:
def increase(self) -> None:
self.val += self.incr
メソッドの第
1
引数(
self
)には、現在のオブジェクトが代入されます。
ここで、クラスから生成したオブジェクトについてわかっていることは何があるでしょ
うか。クラスのメソッドコード(別名:振る舞い)は同じクラスから生成した他のすべての
オブジェクトと共有しますが、属性値(別名:状態)は個別のコピーを持ちます。これは、
属性値とオブジェクト(つまり、
self
)を対応付けています。
上のことを踏まえて、次のバージョンの
increase
メソッドを考えてください。この
increase
メソッドは、
318
ページで指摘したように正しくありません。
class CountFromBy:
def increase(self) -> None:
val += incr
最後の
1
行は
val
の値を
incr
の値だけ増やしているだけなので、一見無害に思え
ます。しかし、この
increase
メソッドが終了したときに何が起こると思いますか。
increase
内に存在する
val
と
incr
はどちらもスコープ外になるので、メソッドが終
了した瞬間に破棄されてしまいます。
しまった。これはこちらのミスです
あまり説明せずにスコープが登場してしまいましたね。 ...