在Transition状态机上使用DMXPY。

问题描述 投票:1回答:1

我正在尝试使用 DmxPy 编写的状态机,用 过渡 但试图将DmxPy传递给有限状态机时,却抛出一个元类错误。 似乎DmxPy的输出是一个Nonetype,它不在Transitions状态机中运行。

有谁知道如何让下面这个简单的、不能运行的脚本工作起来,或者根据我们所处的状态,让一个灯亮起来?

class DmxPy:
def __init__(self, serialPort):
    self.serial =serialPort(serialPort, baudrate=57600)
    ...other DMX code...

    def set_red(self, channel)
    ...RGBW color red mix...

def set_green(self, channel)
    ...RGBW color green mix...

def render(self)
    self.serial.write(...DMX code...)

上面的脚本很简单,但要运行它将是

dmx = DmxPy('COM5')
dmx.set_red(1)
dmx.render()

dmx = DmxPy('COM5')
dmx.set_red(1)
dmx.render()

Transition状态机代码示例,非功能代码为

class State:
    pass

classFSMOpen(State, DmxPy):
    dmx = DmxPy('COM5')
    dmx.set_red(1)
    dmx.render()

classFSMClosed(State,DmxPy):
    dmx = DmxPy('COM5')
    dmx.set_green(1)
    dmx.render()

classFSM(object)
    ...creation of the FSM...

从上面的代码中,我收到的是 TypeError: metaclass conflict 当我检查DmxPy运行代码的类型时,它告诉我它是一个 <class 'NoneType'>.

那么,我怎样才能在FSM中使用DmxPy代码来根据FSM的状态改变灯光呢? 或者,有谁有更好的主意?

python-3.x methods transition nonetype pytransitions
1个回答
0
投票

我已经加密了一个方法来让代码工作,只是不知道为什么。而且我很聪明,在下一次破解之前,我现在不会在意。

我只是简单地改变了这两个类,把DmxPy代码的调用去掉,像这样

class State:
    pass

classFSMOpen(State):
    dmx = DmxPy('COM5')
    dmx.set_red(1)
    dmx.render()

classFSMClosed(State):
    dmx = DmxPy('COM5')
    dmx.set_green(1)
    dmx.render()

classFSM(object)
    ...creation of the FSM...

如果有人有理由这样做,我洗耳恭听。

© www.soinside.com 2019 - 2024. All rights reserved.