官术网_书友最值得收藏!

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)一些對象屬性。

主站蜘蛛池模板: 石家庄市| 普陀区| 和龙市| 全椒县| 刚察县| 沁阳市| 习水县| 镇平县| 江达县| 神木县| SHOW| 偃师市| 六枝特区| 右玉县| 阜新市| 西平县| 建瓯市| 永嘉县| 镶黄旗| 江华| 武山县| 那坡县| 舞钢市| 凤山市| 蓬安县| 江安县| 胶南市| 辽中县| 南溪县| 本溪市| 镇原县| 随州市| 图片| 永宁县| 黑河市| 永宁县| 辛集市| 招远市| 旬邑县| 广德县| 临桂县|