実践:その1
アキュムレータの機能を実現することを目的として、次のようなクラスを考える。
構成要素:
状態(数値)
機能:
数値を入力することができ、入力値と状態として保持している値を加算する
加算した結果を出力する
状態をインスタンス変数nにより保持し、入力によって行われる加算処理と結果の出力をaddメソッドにより実装したクラスMyAccumulator1を以下に示す。
code:acc1.py
class MyAccumulator1:
def __init__(self):
self.n = 0 # (1)
def add(self, x):
self.n = self.n + x
return self.n
関連:メソッドの定義と呼出し、コンストラクタ
アキュムレータが保持する状態の初期値は0とし、コンストラクタで初期化を行っている。
上のクラスを用いてプログラムを完成させる。アキュムレータには順に1, 2, 1の値を入力している。
code:(続き).py
ac1 = MyAccumulator1()
x = 1
y = ac1.add(x)
print(y)
x = 2
y = ac1.add(x)
print(y)
y = ac1.add(1) # 引数を直接記述
print(y)
クラス定義(緑の枠)からインスタンス化(肌色の枠)されるまでの様子の概略図を示す。
https://scrapbox.io/files/652baf97afcb4f001b2f8ec5.png
このプログラムは次のように動作する
ステップ1
ac1:状態0+入力1 -> 状態1
ステップ2
ac1:状態1+入力2 -> 状態3
ステップ3
ac1:状態3+入力1 -> 状態4
https://scrapbox.io/files/6715dd80d5e27aefeea9ef54.png
対話モードを使って、アキュムレータac1が保持するインスタンス変数nを確認する。
code:(実行例).py
$ python3 -i acc1.py
1
3
4
>> ac1.n
4