日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

zg手册 之 python2.7.7源码分析(1)-- python中的对象

發(fā)布時(shí)間:2025/5/22 python 149 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zg手册 之 python2.7.7源码分析(1)-- python中的对象 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

源代碼主要目錄結(jié)構(gòu)

  • Demo: python 的示例程序

  • Doc: 文檔

  • Grammar: 用BNF的語(yǔ)法定義了Python的全部語(yǔ)法,提供給解析器使用

  • Include: 頭文件,在用c/c++編寫擴(kuò)展模塊時(shí)使用

  • Lib: Python自帶的標(biāo)準(zhǔn)庫(kù),用python編寫的

  • Modules: 用c編寫的內(nèi)建模塊的實(shí)現(xiàn),zlib,md5 等

  • Objects: 內(nèi)建對(duì)象類型的實(shí)現(xiàn) list,dict 等

  • PC: ? ? ?windows 平臺(tái)相關(guān)文件

  • PCbuild: Microsoft Visual C++ 項(xiàng)目工程目錄

  • Parser: ?對(duì) Python 代碼進(jìn)行詞法分析和語(yǔ)法分析的代碼

  • Python: ?字節(jié)碼編譯器和解釋器

  • Tools: ? 一些用 Python 開(kāi)發(fā)的工具


  • python 的對(duì)象定義和創(chuàng)建

    在 python 中,一切都是對(duì)象

    python 中的對(duì)象有定長(zhǎng)對(duì)象PyObject (如 int 對(duì)象),變長(zhǎng)對(duì)象PyVarObject(如 list 對(duì)象), Python 的對(duì)象都屬于這兩種之一。對(duì)象中包含引用計(jì)數(shù)和類型信息,管理和創(chuàng)建對(duì)象需要用到。還包含屬性值的存儲(chǔ)空間。

    PyObject 對(duì)象在內(nèi)存中的結(jié)構(gòu)類似下面代碼:

    //?在?Include/object.h?中 //?定長(zhǎng)對(duì)象 typedef?struct?_object?{int?ob_refcnt;?//?用于內(nèi)存管理的引用計(jì)數(shù)struct?_typeobject?*ob_type;?//?類型對(duì)象,包含類型信息 }?PyObject;//?變長(zhǎng)對(duì)象 typedef?struct?{int?ob_refcnt;?//?用于內(nèi)存管理的引用計(jì)數(shù)struct?_typeobject?*ob_type;?//?類型對(duì)象,包含類型信息Py_ssize_t?ob_size;?//?變長(zhǎng)對(duì)象(容器類:?list等)容納元素的個(gè)數(shù) }?PyVarObject;//?int?對(duì)象 typedef?struct?{PyObject_HEADlong?ob_ival; }?PyIntObject;


    類型對(duì)象

    在PyObject 的類型對(duì)象中(struct _typeobject *ob_type;),有關(guān)于類型的名稱,內(nèi)存占用大小,構(gòu)造,析構(gòu)函數(shù)指針等屬性。這些是創(chuàng)建對(duì)象所需要的信息。

    //?類型對(duì)象定義代碼片段 typedef?struct?_typeobject?{PyObject_VAR_HEADconst?char?*tp_name;?/*?名稱,?打印時(shí)輸出的格式?"<module>.<name>"?*/Py_ssize_t?tp_basicsize,?tp_itemsize;?/*?創(chuàng)建對(duì)象時(shí)分配的內(nèi)存空間大小?*//*?類型實(shí)現(xiàn)的標(biāo)準(zhǔn)方法?*/destructor?tp_dealloc;printfunc?tp_print;getattrfunc?tp_getattr;setattrfunc?tp_setattr;cmpfunc?tp_compare;reprfunc?tp_repr;/*?數(shù)值對(duì)象的操作方法集合?*/PyNumberMethods?*tp_as_number;/*?序列對(duì)象的操作方法集合?*/PySequenceMethods?*tp_as_sequence;/*?關(guān)聯(lián)對(duì)象的操作方法集合?*/PyMappingMethods?*tp_as_mapping; //?... }?PyTypeObject;//?python?的類的基本類型,所有類型都應(yīng)該從這個(gè)類型繼承 PyAPI_DATA(PyTypeObject)?PyType_Type;?/*?built-in?'type'?*/ PyAPI_DATA(PyTypeObject)?PyBaseObject_Type;?/*?built-in?'object'?*/ PyAPI_DATA(PyTypeObject)?PySuper_Type;?/*?built-in?'super'?*/

  • 所有類型對(duì)象,自定義類對(duì)象的類型都是 PyType_Type(python內(nèi)置的 type 類型),PyType_Type 本身也是一個(gè)對(duì)象。

  • 上面的 PyBaseObject_Type 類對(duì)象是所有其他類的基類(python中內(nèi)置的 object 類型)。PyBaseObject_Type 本身也是一個(gè)對(duì)象。

  • 數(shù)值/序列/關(guān)聯(lián)對(duì)象的操作方法集合,定義了對(duì)象具有這三種對(duì)象的操作方法(如數(shù)值對(duì)象也可以有 []取值操作)。


  • 對(duì)象的創(chuàng)建

    類型對(duì)象在腳本被執(zhí)行的時(shí)候創(chuàng)建,并且添加到符號(hào)表。在需要?jiǎng)?chuàng)建類對(duì)象的實(shí)例時(shí),從符號(hào)表中獲取類型對(duì)象,并創(chuàng)建它的實(shí)例(在 symtable.c 文件中有相關(guān)符號(hào)表的代碼)。 C api 創(chuàng)建類對(duì)象有一套接口:

    //?創(chuàng)建一個(gè)整型類對(duì)象 PyObject*?intObj?=?PyObject_New(PyObject,?&PyInt_Type);PyObject?*_PyObject_New(PyTypeObject?*tp) {PyObject?*op;op?=?(PyObject?*)?PyObject_MALLOC(_PyObject_SIZE(tp));if?(op?==?NULL)return?PyErr_NoMemory();return?PyObject_INIT(op,?tp); }

    在 python 中創(chuàng)建對(duì)象時(shí),創(chuàng)建過(guò)程如下例描述:

    class?Test(object):passobjTest?=?Test()

  • PyObject_Call 函數(shù)被調(diào)用,參數(shù)是 Test 類對(duì)象

  • 因?yàn)槔^承自 object, 根據(jù)類型對(duì)象的類型調(diào)用 object類型的 tp_call

  • tp_call 調(diào)用 tp_new,tp_init(對(duì)應(yīng) python類的 __init__ 初始化構(gòu)造函數(shù))。


  • 原文鏈接: zg手冊(cè) 之 python2.7.7源碼分析(1)-- python中的對(duì)象

    轉(zhuǎn)載于:https://my.oschina.net/hopez/blog/288390

    總結(jié)

    以上是生活随笔為你收集整理的zg手册 之 python2.7.7源码分析(1)-- python中的对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。