gpt4 book ai didi

python - Python 类是否可以编写成可以传递给 write()?

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:01 25 4
gpt4 key购买 nike

我想将我的类的一个实例传递给 write() 并将其写入文件。底层数据只是一个字节数组。

mine = MyClass()

with open('Test.txt', 'wb') as f:

f.write(mine)

我尝试实现 __bytes__ 但无济于事。我知道缓冲协议(protocol),但我相信它只能通过 C API 实现(尽管我确实看到过关于委托(delegate)给实现该协议(protocol)的底层对象的讨论)。

最佳答案

不,你不能,没有你可以实现的特殊方法可以让你的 Python 类支持缓冲协议(protocol)。

是的,io.RawIOBase.write()io.BufferedIOBase.write()方法记录他们接受 bytes-like object ,但是缓冲区协议(protocol)需要制作bytes-like is a C-level protocol only .有一个 open Python issue to add Python hooks但在这方面没有取得任何进展。

__bytes__ special method仅当您将对象传递给 bytes() 可调用对象时才会调用; .write() 不会这样做。

因此,在写入文件时,只接受实际的 bytes 类对象,所有其他 必须首先转换为这样的对象。我会坚持:

with open('Test.txt', 'wb') as f:
f.write(bytes(mine))

它将调用 MyClass.__bytes__() 方法,前提是它已被定义,或者在您的类上提供一个方法使其将自身写入文件对象:

with open('Test.txt', 'wb') as f:
mine.dump(f)

关于python - Python 类是否可以编写成可以传递给 write()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54894545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com