所有Python對象都直接或間接繼承自PyObject,PyObject的定義很簡單:
struct _object {
Py_ssize_t ob_refcnt; // 引用計數
struct PyTypeObject *ob_type; // 類型對象指針
} PyObject;
引用計數決定對象的生存。當ob_refcnt為0時銷毀對象。
Python類型對象(PyTypeObject)里的成員就是充當C++中的虛函數表。
PyTypeObject也是一種對象,同樣繼承自PyObject,其中除了記錄對象名和對象大小等數據之外就是一系列的函數指針。包括怎么回收對象內存的析構函數,怎么打印對象,屬性相關函數,以及數值型對象(Number)函數系、序列對象(Sequence)函數系、映射對象(Mapping)函數系等等一系列函數。不同類型的對象根據自身需要設置函數指針的值。比如整數對象PyIntObject只有Number函數,而沒有Sequence和Mapping函數。