标准类型层次
根据Manual中The standard type hierarchy一节的类型信息,我们首先尝试列出一个表:
| 类型 | 对象类 | |||
| PyNone_Type | PyObject | None | ||
| PyBool_Type | PyLongObject | NotImplemented | ||
| PyEllipsis_Type | PyObject | Ellipsis | ||
| PyLone_Type | PyLongObject | numbers.Integral | numbers.Number | |
| PyFloat_Type | numbers.Real | |||
| PyComplex_Type | numbers.Complex | |||
| PyUnicode_Type | PyUnicodeObject | Strings | Sequences | |
| PyTuple_Type | Tuples | |||
| PyBytes_Type | PyBytesObject | Bytes | ||
| PyList_Type | Lists | |||
| PyByteArray_Type | Byte Arrays | |||
| PySet_Type | Sets | Set | ||
| PyTraceBack_Type | Frozen sets | |||
| PyDict_Type | Dictionaries | Mappings | ||
| PyFunction_Type | PyFunctionObject | 用户自定义函数 | Callable types | |
| PyInstanceMethod_Type | PyInstanceMethodObject | 实例的方法 | ||
| 生成器函数 | ||||
| PyCFunction_Type | PyCFunctionObject | 内置函数 | ||
| 内置方法 | ||||
| 类 | ||||
| 类实例 | ||||
| PyModule_Type | Modules | |||
| Custom class | ||||
| Class instances | ||||
| I/O objects | ||||
| PyCode_Type | Code objects | Internal types | ||
| PyFrame_Type | Frame objects | |||
| PyTraceBack_Type | Traceback objects | |||
| PySlice_Type | PySliceObject | Slice objects | ||
| PyStaticMethod_Type | staticmethod | Static method objects | ||
| PyClassMethod_Type | classmethod | Class method objects |
刚开始接触这个东西,很多地方还不了解,以至于这个简单的表格都无法补全(留待以后慢慢完善)
Py***_Type
这些都是结构体PyTypeObject的实例,以PyLong_Type为例:
- 变量声明在 Inlcude/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 ...
- 变量定义在 Object/longobject.c 中:
PyTypeObject PyLong_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"int", /* tp_name */
offsetof(PyLongObject, ob_digit), /* tp_basicsize */
sizeof(digit), /* tp_itemsize */
long_dealloc, /* tp_dealloc */
...
&long_as_number, /* tp_as_number */
...
long_new, /* tp_new */
PyObject_Del, /* tp_free */
};
-
PyTypeObject本身也是一个PyObject,所以它也有自己的类型,这就是PyType_Type
PyTypeObject PyType_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"type", /* tp_name */
sizeof(PyHeapTypeObject), /* tp_basicsize */
sizeof(PyMemberDef), /* tp_itemsize */
(destructor)type_dealloc, /* tp_dealloc */
...
- 类型信息在Python中通过type来获取
>>> type(0L) <type 'long'> >>> type(long) <type 'type'> >>> type(type) <type 'type'>
Python类型层次结构解析
本文详细介绍了Python中的标准类型层次结构,从PyNone_Type到PyClassMethod_Type等基本类型的定义和继承关系,并提供了具体的结构体实例说明。
617

被折叠的 条评论
为什么被折叠?



