Python 3.x 按价值法的单一分派…;
我正在从串行端口读取一些二进制数据。每个数据包可以包含一个由特定字节序列标识的宽数组(几十条左右)消息。为了简单起见,让我们假设只有一个bye,以便Python 3.x 按价值法的单一分派…;,python-3.x,enums,single-dispatch,Python 3.x,Enums,Single Dispatch,我正在从串行端口读取一些二进制数据。每个数据包可以包含一个由特定字节序列标识的宽数组(几十条左右)消息。为了简单起见,让我们假设只有一个bye,以便0x01对应于第一条消息,依此类推。我希望能够调用进程方法来处理每条消息。我可以有一个漫长而乏味的if循环,但那将是可怕的。一个singledispatch似乎是一个更好的选择,但是每个消息都有一个类,并且返回到巨大的if循环来创建这些类 因此,我需要一个值为bytearray的调度来处理方法 大概是这样的: from functools impor
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
作为基类。我的realOok
类继承自一个抽象类(因此我可以使用模拟器而不是真正的硬件),并将其与Enum
混合使用会引发类型错误:元类冲突:派生类的元类必须是其所有基元类的(非严格)子类