Ken*_*nny 5 python file-io byte python-3.x
我想将我的类的一个实例传递给 write() 并将其写入文件。底层数据只是一个字节数组。
mine = MyClass()
with open('Test.txt', 'wb') as f:
f.write(mine)
Run Code Online (Sandbox Code Playgroud)
我尝试实施__bytes__无济于事。我知道缓冲区协议,但我相信它只能通过 C API 实现(尽管我确实看到了对实现该协议的底层对象的委托的讨论)。
不,你不能,你没有可以实现的特殊方法来使你的 Python 类支持缓冲区协议。
是的,io.RawIOBase.write()和io.BufferedIOBase.write()方法记录了它们接受bytes类似对象,但是制作bytes类似 对象所需的缓冲区协议只是 C 级协议。有一个开放的 Python 问题来添加 Python 挂钩,但尚未取得任何进展。
仅当您将对象传递给可调用对象时才会调用特殊__bytes__方法bytes();.write()不这样做。
因此,在写入文件时,仅bytes接受实际的类似对象,其他所有内容都必须首先转换为此类对象。我会坚持:
with open('Test.txt', 'wb') as f:
f.write(bytes(mine))
Run Code Online (Sandbox Code Playgroud)
它将调用该MyClass.__bytes__()方法(如果已定义),或者在您的类上提供一个方法,使其将自身写入文件对象:
with open('Test.txt', 'wb') as f:
mine.dump(f)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |