我有一组代表网络数据结构的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()
方法调用?
答案 0 :(得分:0)
您可以使该类成为bytearray
的子类,并使任何可以改变对象值的方法通过__setitem__
方法(即,使用方括号)更新字节数组的值:
class MyClassName(bytearray):
def update(self):
''' a method that makes certain alterations to the object's value '''
self[:] = self.pack()