我想将类的实例传递给write()并将其写入文件。基础数据只是一个字节数组。
mine = MyClass()
with open('Test.txt', 'wb') as f:
f.write(mine)
我尝试实施__bytes__
无济于事。我知道缓冲协议,但是我相信只能通过C API来实现(尽管我确实看到了关于委托给实现该协议的基础对象的讨论。)
答案 0 :(得分:3)
不,您不能,没有可以实现的特殊方法来使您的Python类支持缓冲协议。
是的,io.RawIOBase.write()
和io.BufferedIOBase.write()
方法说明它们接受bytes
-like object,但是制作某些东西 {{1 }}类 is a C-level protocol only。有一个open Python issue to add Python hooks,但尚未取得任何进展。
只有将对象传递给bytes
可调用对象时,才会调用__bytes__
special method; bytes()
不会这样做。
因此,在写入文件时,仅接受实际的类似.write()
的对象,其他所有必须首先转换为此类对象。我会坚持:
bytes
,它将调用with open('Test.txt', 'wb') as f:
f.write(bytes(mine))
方法(如果已定义),或在您的类上提供一种导致其将自身写入文件对象的方法:
MyClass.__bytes__()