- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 371字
- 2021-04-30 12:39:31
0.3.5 類型對象
前面提到了PyObject的對象類型指針struct_typeobject*ob_type,它指向的對象類型決定了一個對象是什么類型。這是一個非常重要的結構體,不僅決定了對象的類型,還包含大量的元信息,包括創建對象需要分配多少內存,對象都支持哪些操作等。
現在了解一下struct_typeobject的源碼,相關源碼(Include/object.h)如下:
// Include/object.h typedef struct _typeobject { PyObject_VAR_HEAD const char *tp_name; /* For printing, in format "<module>.<name>" */ // 類型名 Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ // 創建該類型對象分配的內存空間大小 // 一堆方法定義,函數和指針 /* Methods to implement standard operations */ destructor tp_dealloc; printfunc tp_print; getattrfunc tp_getattr; setattrfunc tp_setattr; PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2) or tp_reserved (Python 3) */ reprfunc tp_repr; /* Method suites for standard classes */ // 標準類方法集 PyNumberMethods *tp_as_number; // 數值對象操作 PySequenceMethods *tp_as_sequence; // 序列對象操作 PyMappingMethods *tp_as_mapping; // 字典對象操作 // 更多標準操作 /* More standard operations (here for binary compatibility) */ hashfunc tp_hash; ...... } PyTypeObject;
PyTypeObject的定義中包含許多信息,主要分為以下幾類。
1)類型名tp_name,主要用于Python內部調試。
2)創建該類型對象時分配的空間大小信息,即tp_basicsize和tp_itemsize。
3)與該類型對象相關的操作信息,如tp_print這樣的函數指針。
4)一些對象屬性。
推薦閱讀
- Learning Cython Programming(Second Edition)
- Moodle Administration Essentials
- 摩登創客:與智能手機和平板電腦共舞
- PyQt從入門到精通
- Scala謎題
- Java 9模塊化開發:核心原則與實踐
- Java程序設計入門
- Extreme C
- 跟戴銘學iOS編程:理順核心知識點
- JavaScript悟道
- 數據科學中的實用統計學(第2版)
- Applied Deep Learning with Python
- 城市信息模型平臺頂層設計與實踐
- Splunk Developer's Guide(Second Edition)
- Neo4j權威指南 (圖數據庫技術叢書)