PEPPER Input하면 Random으로 Output하는 PythonBox를 만든다

개요



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 해 둔 메소드를 실행하고 있습니다.

좋은 웹페이지 즐겨찾기