[英]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_getbuffer
和bf_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.