Py***_Type的说明

Py***_Type这些都是结构体PyTypeObject的实例。

以PyLong_Type为例来说明:

(1)变量声明在Include/longobject.h中:

PyAPI_DATA(PyTypeObject) PyLong_Type;

注意:PyAPI_DATA是一个宏,定义在Include/pyport.h,用来隐藏动态库平台的差异,片段如下:

#define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE
#define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE

 

(2)变量定义在Objects/longobject.c中:

 1 PyTypeObject PyLong_Type = {
 2     PyVarObject_HEAD_INIT(&PyType_Type, 0)
 3     "int",                                      /* tp_name */
 4     offsetof(PyLongObject, ob_digit),           /* tp_basicsize */
 5     sizeof(digit),                              /* tp_itemsize */
 6     long_dealloc,                               /* tp_dealloc */
 7     0,                                          /* tp_print */
 8     0,                                          /* tp_getattr */
 9     0,                                          /* tp_setattr */
10     0,                                          /* tp_reserved */
11     long_to_decimal_string,                     /* tp_repr */
12     &long_as_number,                            /* tp_as_number */
13     0,                                          /* tp_as_sequence */
14     0,                                          /* tp_as_mapping */
15     (hashfunc)long_hash,                        /* tp_hash */
16     0,                                          /* tp_call */
17     long_to_decimal_string,                     /* tp_str */
18     PyObject_GenericGetAttr,                    /* tp_getattro */
19     0,                                          /* tp_setattro */
20     0,                                          /* tp_as_buffer */
21     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
22         Py_TPFLAGS_LONG_SUBCLASS,               /* tp_flags */
23     long_doc,                                   /* tp_doc */
24     0,                                          /* tp_traverse */
25     0,                                          /* tp_clear */
26     long_richcompare,                           /* tp_richcompare */
27     0,                                          /* tp_weaklistoffset */
28     0,                                          /* tp_iter */
29     0,                                          /* tp_iternext */
30     long_methods,                               /* tp_methods */
31     0,                                          /* tp_members */
32     long_getset,                                /* tp_getset */
33     0,                                          /* tp_base */
34     0,                                          /* tp_dict */
35     0,                                          /* tp_descr_get */
36     0,                                          /* tp_descr_set */
37     0,                                          /* tp_dictoffset */
38     0,                                          /* tp_init */
39     0,                                          /* tp_alloc */
40     long_new,                                   /* tp_new */
41     PyObject_Del,                               /* tp_free */
42 };

 

 

PyTypeObject本身也是一个PyObject,它的类型是PyType_Type。

(1)声明:Include/object.h

PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */
PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */
PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */

 

(2)定义:Objects/typeobject.c

 1 PyTypeObject PyType_Type = {
 2     PyVarObject_HEAD_INIT(&PyType_Type, 0)
 3     "type",                                     /* tp_name */
 4     sizeof(PyHeapTypeObject),                   /* tp_basicsize */
 5     sizeof(PyMemberDef),                        /* tp_itemsize */
 6     (destructor)type_dealloc,                   /* tp_dealloc */
 7     0,                                          /* tp_print */
 8     0,                                          /* tp_getattr */
 9     0,                                          /* tp_setattr */
10     0,                                          /* tp_reserved */
11     (reprfunc)type_repr,                        /* tp_repr */
12     0,                                          /* tp_as_number */
13     0,                                          /* tp_as_sequence */
14     0,                                          /* tp_as_mapping */
15     0,                                          /* tp_hash */
16     (ternaryfunc)type_call,                     /* tp_call */
17     0,                                          /* tp_str */
18     (getattrofunc)type_getattro,                /* tp_getattro */
19     (setattrofunc)type_setattro,                /* tp_setattro */
20     0,                                          /* tp_as_buffer */
21     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
22         Py_TPFLAGS_BASETYPE | Py_TPFLAGS_TYPE_SUBCLASS,         /* tp_flags */
23     type_doc,                                   /* tp_doc */
24     (traverseproc)type_traverse,                /* tp_traverse */
25     (inquiry)type_clear,                        /* tp_clear */
26     0,                                          /* tp_richcompare */
27     offsetof(PyTypeObject, tp_weaklist),        /* tp_weaklistoffset */
28     0,                                          /* tp_iter */
29     0,                                          /* tp_iternext */
30     type_methods,                               /* tp_methods */
31     type_members,                               /* tp_members */
32     type_getsets,                               /* tp_getset */
33     0,                                          /* tp_base */
34     0,                                          /* tp_dict */
35     0,                                          /* tp_descr_get */
36     0,                                          /* tp_descr_set */
37     offsetof(PyTypeObject, tp_dict),            /* tp_dictoffset */
38     type_init,                                  /* tp_init */
39     0,                                          /* tp_alloc */
40     type_new,                                   /* tp_new */
41     PyObject_GC_Del,                            /* tp_free */
42     (inquiry)type_is_gc,                        /* tp_is_gc */
43 };

 

 

转载于:https://www.cnblogs.com/fortwo/archive/2013/04/16/3024966.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值