繁体   English   中英

当类实现PEP 3118时,Python 2.7中PyBufferProcs的定义

[英]Definition of PyBufferProcs in Python 2.7 when class implements PEP 3118

我正在扩展我们的库(支持Python 2.7)中的类以支持PEP 3118 ,后者已经被反向移植到2.7。

从文档中,我需要初始化tp_as_buffer字段以指向PyBufferProcs 但是,从2.7的文档中, 此结构的描述仅包含旧缓冲区协议的条目。 从消息来源,我收集PyBufferProcs为新协议( bf_getbufferbf_releasebuffer )提供了一些额外的条目。

问题仍然存在:

  • 我是否必须做一些特别的事情来告诉Python这些新条目是否有效?

  • 我是否必须填写旧协议的条目? (例如,2.7的文档说明bf_getsegcount可能不为null。但如果我支持PEP 3118,则不应使用此条目。)

你可以填写PyBufferProcs的最后两个字段, 但是你必须将Py_TPFLAGS_HAVE_NEWBUFFER标志添加到你的类型的tp_flags中。 这是python2中引入的特殊内容,它使新协议与旧协议一起使用。

我不知道为什么在任何地方都没有记录,但你可以看到它在python 2.7的bytearray类型的定义中使用(见这里 ):

&bytearray_as_buffer,               /* tp_as_buffer */
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
    Py_TPFLAGS_HAVE_NEWBUFFER,          /* tp_flags */

此内容已发布在评论中,但值得回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM