概要
PythonBoxにてRandomで分岐を作りたいとき
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
pass
def onUnload(self):
pass
def onInput_onStart(self):
import random
num = random.randint(0, 1)
if num == 0:
self.onA()
else:
self.onB()
こういう実装をすると
分岐を2つから3つにしたいときにコードをいじって、
ボックスを編集からアウトプットを増やしてという手順を踏まなければいけないので、
アプトプットを増やしら、勝手に分岐を作ってくれるようにします。
実装
import numpy
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.outputs = []
for attr in dir(self):
if callable(getattr(self, str(attr))) and "output" in str(attr):
self.outputs.append(attr)
def onUnload(self):
self.outputs = []
def onInput_onStart(self):
r = numpy.random.randint(0, len(self.outputs))
method = getattr(self, self.outputs[r])
method()
解説
ボックスを編集から入力、出力を増やすとボックスのメソッドが宣言されます。
onLoad時にdir(self)を使ってボックスのプロパティを取得して、
callableで実行可能か(メソッドであるか)チェックして、
outputと付いているメソッドをself.outputsにappendしてます。
onInput_onStartでself.outputsにappendしておいたメソッドを実行してます。