将新类定义为Python C API中的结构有什么意义

时间:2015-04-09 12:04:29

标签: python c python-c-api

The docs for Python C API描述了定义新类型的模式:

typedef struct {
    PyObject_HEAD
    PyObject *first; /* first name */
    PyObject *last;  /* last name */
    int number;
} Noddy;
...

然后可以添加init等方法。

我的问题是 - 在结构中定义自定义字段有什么意义,为什么不在init中定义它们,就像在Python中一样,使用self上的PyObject_SetAttr函数调用?

1 个答案:

答案 0 :(得分:3)

  1. 结构成员访问远比dict查找更有效。
  2. 结构成员访问在C中更容易方便thing->fooPyObject_GetAttrString(thing, "foo")更容易。
  3. 使用struct members允许您存储非Python类型的数据。这允许你做一些不能用Python类型实现的东西,或者那些在Python类型方面效率低得多的东西。
  4. 使用struct members可以防止每个对象都需要自己的dict。最重要的结果是,dict不必具有无限的下降链,但它也可以提高空间效率。
  5. 此API存在于Python级class语句之前以及这些语句的执行方式。