我试图从2.6中的'缓冲'类派生,但无法这样做

时间:2013-11-18 07:30:53

标签: python python-2.6

class memoryview(buffer):
    def tobytes(self):
        return self

buf = memoryview('23')
buf.tobytes()

python interpreter给我以下错误

TypeError: Error when calling the metaclass bases
    type 'buffer' is not an acceptable base type

为什么会如此

1 个答案:

答案 0 :(得分:1)

请参阅评论中链接的问题,以了解拒绝这一点的可能原因列表。

直接的技术原因与如何用C语言声明Python类有关。有趣的部分就在bufferobject.c的底部:

PyTypeObject PyBuffer_Type = {
    ...
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GETCHARBUFFER | Py_TPFLAGS_HAVE_NEWBUFFER, /* tp_flags */
    ...
};

此字段tp_flags包含一个名为Py_TPFLAGS_BASETYPE的潜在设置,此处未使用。如果 ,就像它在listobject.c中那样,则允许从buffer继承。