如何使用Python C-API实现__nonzero__?
我问这个问题的原因是,我正在尝试修复一些Python C-API代码中的错误。在这里,__nonzero__方法被添加到方法表格中,如下所示:
static PyMethodDef PyFoo_methods[] = {
...
{ (char*)"__nonzero__", (PyCFunction)_Foo_nonzero, METH_KEYWORDS|METH_VARARGS, NULL },
...
};
PyTypeObject PyFoo_Type = {
PyObject_HEAD_INIT(NULL),
0,
....
(struct PyMethodDef*)PyFoo_methods, /* tp_methods */
...
};但是,当我测试代码时,应用于Foo对象的bool()总是返回True;从未调用过_Foo_nonzero函数。
代码有什么问题?
发布于 2012-03-23 03:17:31
C中的类型定制不是通过方法结构中的特定方法完成的,而是通过填充PyTypeObject结构的特定字段来完成的。对于__nonzero__,C等效项是PyNumberMethods结构的nb_nonzero成员,该成员由PyTypeObject结构中的tp_as_number成员指向:http://docs.python.org/c-api/typeobj.html#number-object-structures
https://stackoverflow.com/questions/9828822
复制相似问题