LoginSignup
5

More than 5 years have passed since last update.

PEPPER InputしたらRandomでOutputするPythonBoxをつくる

Last updated at Posted at 2015-06-26

概要

PythonBoxにてRandomで分岐を作りたいとき

スクリーンショット 2015-06-26 18.35.37.png

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しておいたメソッドを実行してます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5