1

我正在从串行端口读取一些二进制数据。每个数据包可以包含由特定字节序列标识的宽数组(几十个左右)消息。为简单起见,让我们假设只有一个再见,以便0x01对应于第一条消息,依此类推。我希望能够调用一个process方法来处理每条消息。我可以有一个漫长而乏味的 if 循环,但这会很可怕。Asingledispatch似乎是一个更好的选择,但每条消息的类似乎 OO 已经完成,并且返回到用于创建这些的巨大 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 的博客文章,但他的按值分派的实现Enum用作基类。我真正的Ook类继承自一个抽象类(所以我可以有一个模拟器而不是真正的硬件)并将它与Enumraises混合TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its base......

4

0 回答 0