Python在父对象创建时从父对象添加子类

Python在父对象创建时从父对象添加子类,python,subclass,ctypes,Python,Subclass,Ctypes,我正在使用Python与硬件设备进行通信。通信协议通常如下所示: {header bytes} {data bytes} {CRC bytes} ctypes对于通信协议非常有效,因为我可以定义如下内容: class Header( BigEndianStructure ): _pack_ = 1 _fields_ = [("Address", c_ubyte, 8), ("MessageLength", c_ubyte

我正在使用Python与硬件设备进行通信。通信协议通常如下所示:

{header bytes}
{data bytes}
{CRC bytes}
ctypes对于通信协议非常有效,因为我可以定义如下内容:

class Header( BigEndianStructure ):
    _pack_ = 1
    _fields_ = [("Address",         c_ubyte,    8),
                ("MessageLength",   c_ubyte,    8),
                ("MessageType",     c_ubyte,    8)]

    def __init__(self):
        pass
这将处理收割台。然后,所有消息体都可以继承此消息头,从而减少冗余

class Body( Header):

    _fields_ = [("Data", c_ubyte, 8)]

    def __init__(self):
        super().__init__()
问题是: 我不想在每个子类中都定义(“CRC8”,c_-ubyte,8)


我希望能够在创建对象时自动生成每个子类。这样,我就不必为每条消息手动添加尾随字节。

为什么
Body
子类
Header
?另一个负责将不同部分组合在一起的模块如何?我需要使用ctypes(C/C++类型数据结构),因为它与C/C++代码中使用的数据结构的比例为1:1。通过这种方式,我们可以以1:1的关系关联位字段,无符号与有符号、32位与16位与8位。这对我们的领域非常有用。至于你的问题,在python世界中,让“header”对象定义COM消息中的位更有意义,这样我就不必为每条消息重新定义这些头位。在解释位时,每条消息都可以通过继承自动计算出头位。那么发布C结构呢?因为主体扩展头是错误的。应该有一个包含头、主体和CRC的消息类。或者如果你是这样开始的,为什么不
\u fields.[(“Data”,c\u ubyte,8),(“CRC”,c\u uint32)]
?所有的子类都是什么?还要注意,Body只有一个字节。一个问题:使用位字段的目的是什么<代码>无符号字符的长度无论如何都是8位。为什么
正文
子类标题?另一个负责将不同部分组合在一起的模块如何?我需要使用ctypes(C/C++类型数据结构),因为它与C/C++代码中使用的数据结构的比例为1:1。通过这种方式,我们可以以1:1的关系关联位字段,无符号与有符号、32位与16位与8位。这对我们的领域非常有用。至于你的问题,在python世界中,让“header”对象定义COM消息中的位更有意义,这样我就不必为每条消息重新定义这些头位。在解释位时,每条消息都可以通过继承自动计算出头位。那么发布C结构呢?因为主体扩展头是错误的。应该有一个包含头、主体和CRC的消息类。或者如果你是这样开始的,为什么不
\u fields.[(“Data”,c\u ubyte,8),(“CRC”,c\u uint32)]
?所有的子类都是什么?还要注意,Body只有一个字节。一个问题:使用位字段的目的是什么<代码>无符号字符的长度仍然是8位。