如何在类上调用write()?

时间:2019-01-25 21:38:38

标签: python python-3.x

我有一组代表网络数据结构的python类(也用于磁盘存储)。我希望能够在该类上调用write()并获取其标准的二进制表示形式。

这些类可以通过pack()方法将自身struct.pack打包成二进制表示形式。我可以覆盖__bytes__方法来调用self.pack(),以便write(bytes(myobject))可以工作,但不能写(myobject):

TypeError: a bytes-like object is required, not 'MyClassName'

在没有显式write()强制转换的情况下,是否可以覆盖使bytes()工作的某些内容?可能我的类必须是Bytes的子类,但是...我想我仍然必须以某种方式挂接pack()方法调用?

1 个答案:

答案 0 :(得分:0)

您可以使该类成为bytearray的子类,并使任何可以改变对象值的方法通过__setitem__方法(即,使用方括号)更新字节数组的值:

class MyClassName(bytearray):
    def update(self):
        ''' a method that makes certain alterations to the object's value '''
        self[:] = self.pack()