首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python C-API实现__nonzero__?

如何使用Python C-API实现__nonzero__?
EN

Stack Overflow用户
提问于 2012-03-23 03:04:02
回答 1查看 413关注 0票数 2

如何使用Python C-API实现__nonzero__

我问这个问题的原因是,我正在尝试修复一些Python C-API代码中的错误。在这里,__nonzero__方法被添加到方法表格中,如下所示:

代码语言:javascript
复制
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函数。

代码有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9828822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档