実践:その4
その3で示した回路netをクラスを用いて表現することを考える。
名前:
Net1
構成要素:
直列結合された2個のアキュムレータ
機能:
数値を入力することができ、この値を1層目への入力とする
1層目の出力を2層目への入力とし、2層目の出力を回路の出力とする
構成要素をインスタンス変数で、回路への数値の入力によって行われる処理をcalcメソッドにより実装したNet1クラスを次に示す。
code:acc4.py
class Net1:
def __init__(self):
self.ac1 = MyAccumulator2() # ac1はインスタンス変数
self.ac2 = MyAccumulator2() # ac2はインスタンス変数
def calc(self, x):
x = self.ac1(x)
x = self.ac2(x)
return x
アキュムレータには、実践:その2のacc2.pyで示したMyAccumulator2クラスを用いること。
参考:特殊メソッド__call__について
メソッドcalcの中で、インスタンス変数が指し示しているインスタンスの中のメソッドを利用することを、__call__メソッドを介せずに書くと次のようにドットを2回重ねた表記となる。
code:(抜粋).py
def calc(self, x):
x = self.ac1.add(x)
x = self.ac2.add(x)
return x
code:(続き).py
### MyAccumulator2クラス定義をここに流し込む ###
net = Net1() # (☆)
y = net.calc(1)
print(y)
y = net.calc(2)
print(y)
y = net.calc(1)
print(y)
(☆)により、Net1型インスタンスを生成する。この中では更に2つのMyAccumurator2型インスタンスを生成しているので、結果として次のような構造が形成される。
https://scrapbox.io/files/652bb30b7e8f3400356770e7.png
Net1型インスタンスnetが保持するインスタンス変数ac1,ac2を通じて、アキュムレータのインスタンスにアクセスすることができる。対話モードで確認しよう。
code:(実行例).py
$ python3 -i acc4.py
1
4
8
>> net.ac1.n
4
>> net.ac2.n
8