按价值单一调度方法......

时间:2017-09-21 08:45:24

标签: python-3.x enums single-dispatch

我正在从串口读取一些二进制数据。每个数据包可以包含由特定字节序列标识的宽阵列(几十个)。为简单起见,让我们假设只有一个再见,以便0x01对应第一条消息,依此类推。我希望能够调用process方法来处理每条消息。我可以有一个漫长而乏味的if循环,但这将是可怕的。 singledispatch似乎是一个更好的选项,但每个消息的类似乎已经完成,并且回到创建它们的巨大的if循环。

因此,我需要按照bytearray的方法对方法进行单一调度。

这样的事情:

from functools import singledispatch


class Ook(object):

    def __init__(self, *args, **kwargs):
        self.process = singledispatch(self.process)
        self.process.register(bytearray([0x01]), self.process_msg_one)  # FIXME!
        self.process.register(bytearray([0x02]), self.process_msg_two)  # FIXME!

    def process(self, arg):
        raise TypeError("Message is not supported.")

    def process_msg_one(self, arg):
        print(arg)

    def process_msg_two(self, arg):
        print(arg)

我很清楚Łukasz Langa's blog post,但他按值分派的实现使用Enum作为基类。我真正的Ook类继承自抽象类(因此我可以使用模拟器而不是真实硬件)并将其与Enum混合TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its base ...

0 个答案:

没有答案