Python 3.x 按价值法的单一分派…;

Python 3.x 按价值法的单一分派…;,python-3.x,enums,single-dispatch,Python 3.x,Enums,Single Dispatch,我正在从串行端口读取一些二进制数据。每个数据包可以包含一个由特定字节序列标识的宽数组(几十条左右)消息。为了简单起见,让我们假设只有一个bye,以便0x01对应于第一条消息,依此类推。我希望能够调用进程方法来处理每条消息。我可以有一个漫长而乏味的if循环,但那将是可怕的。一个singledispatch似乎是一个更好的选择,但是每个消息都有一个类,并且返回到巨大的if循环来创建这些类 因此,我需要一个值为bytearray的调度来处理方法 大概是这样的: from functools impor

我正在从串行端口读取一些二进制数据。每个数据包可以包含一个由特定字节序列标识的宽数组(几十条左右)消息。为了简单起见,让我们假设只有一个bye,以便
0x01
对应于第一条消息,依此类推。我希望能够调用
进程
方法来处理每条消息。我可以有一个漫长而乏味的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)
我很清楚,但是他的按值分派实现使用
Enum
作为基类。我的real
Ook
类继承自一个抽象类(因此我可以使用模拟器而不是真正的硬件),并将其与
Enum
混合使用会引发
类型错误:元类冲突:派生类的元类必须是其所有基元类的(非严格)子类