我用python处理串行端口的数据。第一个字节表示消息的开头,然后第二个字节表示消息的类型。根据第二个字节,我们以不同的方式读入消息(为了解释不同类型的消息,有些只是数据,有些是字符串等等)。在
我现在有了以下结构。我有一个通用的消息类,它包含每种类型消息的基本函数,然后派生类表示不同类型的消息(例如DataMessage或StringMessage)。这些都有自己特定的读取和打印功能。在
在我从序列号读取的值中,我读取了所有字节。现在,我使用以下代码(这是错误的)来确定消息是DataMessage还是StringMessage(大约有6种不同类型的消息,但我简化了一点)。在
msg_type = serial_port.read(size=1).encode("hex").upper()
msg_string = StringMessage()
msg_data = StringData()
processread = {"01" : msg_string.read, "02" : msg_data.read}
result = processread[msg_type]()
现在我想简化/改进这类代码。我读过关于关闭开关的文章,但我不喜欢我必须创建最终不会使用的对象。有什么改进这个具体问题的建议吗?在
谢谢
这很接近你所拥有的,我看不出有什么问题。在
你说“我不喜欢我必须创建最终不会使用的对象”。你怎么不使用这些对象?如果我有一个StringMessage
^{pr2}$msg
,那么使用一个对象正是它应该如何使用的。您的一个
msg_string
实例只存在于调用msg_string.read()
时,这是否让您感到困扰?我的示例代码为每次读取的消息创建一个新的消息实例;这就是对象的用途。这就是面向对象编程的工作原理。在相关问题 更多 >
编程相关推荐