婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python源碼剖析之PyObject詳解

python源碼剖析之PyObject詳解

熱門標(biāo)簽:武漢外呼系統(tǒng)平臺 沈陽防封電銷卡品牌 池州外呼調(diào)研線路 如何申請400電話費(fèi)用 沈陽外呼系統(tǒng)呼叫系統(tǒng) 外呼系統(tǒng)哪些好辦 沈陽人工外呼系統(tǒng)價(jià)格 江西省地圖標(biāo)注 富錦商家地圖標(biāo)注

一、Python中的對象

Python中一切皆是對象。
————Guido van Rossum(1989)

這句話只要你學(xué)過python,你就很有可能在你的Python學(xué)習(xí)之旅的前30分鐘就已經(jīng)見過了,但是這句話具體是什么意思呢?

一句話來說,就是面向?qū)ο笾械摹邦悺焙汀皩ο蟆痹赑ython中都是對象。類似于int對象的類型對象,實(shí)現(xiàn)了“類的概念”,對類型對象“實(shí)例化”得到的實(shí)例對象實(shí)現(xiàn)了“對象”這個(gè)概念。

通常的說法是,對象是數(shù)據(jù)以及基于這些數(shù)據(jù)的操作的集合。在計(jì)算機(jī)上,一個(gè)對象實(shí)際上就是一片被分配的內(nèi)存空間,這些內(nèi)存可能是連續(xù)的,也有可能是離散的,這都不重要,重要的是這片內(nèi)存在更高的層次上可以作為一個(gè)整體來考慮,這個(gè)整體就是一個(gè)對象。在這片內(nèi)存中,存儲著一系列的數(shù)據(jù)以及可以對這些數(shù)據(jù)進(jìn)行修改或讀取的一系列操作的代碼。

在 Python 中,對象就是在堆上申請的結(jié)構(gòu)體,對象不能是被靜態(tài)初始化的,并且也不能是在棧空間上生存的。唯一的例外就是類型對象(type object),Python中所有的類型對象都是被靜態(tài)初始化的。在 Python 中,一個(gè)對象一旦被創(chuàng)建,它在內(nèi)存中的大小就是不變的了。 這就意味著那些需要容納可變長度數(shù)據(jù)的對象只能在對象內(nèi)維護(hù)一個(gè)指向一個(gè)可變大小的內(nèi)存區(qū)域的指針。

1.1 對象機(jī)制的基石PyObject

PyObjectPyVarObject分別表示定長對象和變長對象,使用的C的struct實(shí)現(xiàn)的,在結(jié)構(gòu)中分別只定義了 PyObject_HEADPyObject_VAR_HEAD,后者僅僅是前者加上一個(gè)表示容納元素個(gè)數(shù)的ob_size

[object.h]
/* PyObject_HEAD defines the initial segment of every PyObject. */
#define PyObject_HEAD \

	_PyObject_HEAD_EXTRA \

	int ob_refcnt; \

	struct _typeobject *ob_type;

#define PyObject_VAR_HEAD \

	PyObject_HEAD \

	int ob_size; /* Number of items in variable part */

而對于兩者共有的PyObject_HEAD中,只有兩個(gè)東西,一個(gè)是維護(hù)引用計(jì)數(shù)的ob_refcnt和一個(gè)指向類型對象PyTypeObject結(jié)構(gòu)體的指針。因此, Python 中實(shí)際上對象機(jī)制的核心非常的簡單,一個(gè)是引用計(jì)數(shù),一個(gè)就是類型。并且Python中每一個(gè)對象的開始字節(jié)都是相同的頭部,這使得對Python對象的引用十分統(tǒng)一,只需要一個(gè)PyObject*可以引用任意一個(gè)對象。

這兩個(gè)結(jié)構(gòu)體定義的只是Python中對象共有的部分,其他的具體類型會有額外的結(jié)構(gòu)體來定義,否則的話所有的對象豈不是都一樣了?比如int類型的結(jié)構(gòu)體定義PyIntObject中包含了PyObject_HEADob_ival后者是一個(gè)long,存放具體的值。

二、類型對象

那初始化對象的時(shí)候,去那里獲得對象的大小呢?只能是在類型對象PyTypeObject中了!類型對象中存放了大量對象的元信息,大小顯然是一種和對象的類型有關(guān)的元信息!注意,一個(gè)PyObject對象就是Python中對面向?qū)ο罄碚撝蓄愡@個(gè)概念的實(shí)現(xiàn),這里面存放了類型名、內(nèi)存空間、操作函數(shù)指針等信息。

2.1 對象的創(chuàng)建

Python會用兩種方法創(chuàng)建對象,一種是泛型API(AOL:Abstract Object Layer),可以應(yīng)用在任何Python對象上,API內(nèi)不會有機(jī)制確定最終調(diào)用哪個(gè)具體函數(shù),比如PyObject_New(PyObject, PyInt_Type)。另一種是類型相關(guān)API(COL:Concrete Object Layer),只能應(yīng)用于具體類型的對象上,比如PyInt_FromLong(10)

自定義對象在Python內(nèi)部不可能存在COL,所以只能根據(jù)其類型對象來創(chuàng)建實(shí)例對象,這就需要PyTypeObject中的tp_new函數(shù)指針,如果是自定義對象,這個(gè)指針可能是空,那就通過PyTypeObjecttp_base找到類型對象的基類,再找tp_new指針,這個(gè)過程中會利用類型對象中記錄的空間信息申請內(nèi)存。對于 Python 中的任何一種變長對象,tp_itemsize 這個(gè)域是必須設(shè)置的,tp_itemsize 指明了由變長對象保存的元素的單位長度,所謂單位長度即是指一個(gè)對象在內(nèi)存中的長度。這個(gè) tp_itemsizeob_size 共同決定了應(yīng)該額外申請的內(nèi)存的總大小是多少。

內(nèi)建對象最終會使用COL完成創(chuàng)建工作。

new函數(shù)完成后,會執(zhí)行init函數(shù),前者類似于new操作符,后者類似于構(gòu)造函數(shù)。

2.2 對象的行為

像前面說的,對象的行為被類型對象中的函數(shù)指針?biāo)x。這些操作中,有三組非常重要的操作族:tp_as_numbertp_as_sequencetp_as_mapping分別指向PyNumberMethodsPtSequenceMethodsPyMappingMethods函數(shù)族結(jié)構(gòu)體。所謂“鴨子類型”,就行能找到該類型對應(yīng)的操作,就可以當(dāng)做這個(gè)類型來用。

class MyInt(int):
    def __getitem__(self, key):
        return key+str(self)

a=MyInt(1)
b=MyInt(2)
print(a+b)
print(a['somekey'])

可以發(fā)現(xiàn)通過int繼承得到的數(shù)值對象,通過重寫魔術(shù)方法,使其支持了字典類型的操作,其實(shí)我們可以認(rèn)為是,制定了MyInt這個(gè)類型對象tp_as_mapping.mp_subscript操作。

2.3 類型的類型

之前說了,作為類的實(shí)現(xiàn)的類型對象也是Python對象,那么類型對象PyObjectob_type指針指向哪呢?是指向自己嗎?盡管我一開始也是這么想的,但可惜這個(gè)答案不對,類型對象指向的對象是PyType_Type。這個(gè)對象在Python類型機(jī)制中很重要,所有用戶自定義class的PyTypeObject對象都是通過這個(gè)對象創(chuàng)建的,因此他是Python中的元類(metaclass)。他是所有class的class。而元類的類型是自己,這里出現(xiàn)了我們一開始認(rèn)為會出現(xiàn)的自己只想自己的情況!

i=1
class A:
    pass
a=A()
print(i.__class__) # 類型對象
print(i.__class__.__class__) # 元類
print(a.__class__) # 類型對象
print(a.__class__.__class__) # 元類
print(a.__class__.__class__.__class__) # 指向自己

留在這里的疑問:虛線和虛線指向的對象是啥玩?

三、Python的多態(tài)性

通過 PyObject 和類型對象, Python 利用 C 語言完成了 C++所提供的繼承和多態(tài)的特性。一開始已經(jīng)提到,Python中所有對象的前面幾個(gè)字節(jié)都是PyObject類型也就是PyObject_HEAD結(jié)構(gòu)體。因此在 Python 內(nèi)部各個(gè)函數(shù)之間傳遞的都是一種范型指針PyObject*。這個(gè)指針?biāo)傅膶ο缶烤故鞘裁搭愋偷?不知道,只能從指針?biāo)笇ο蟮?code>ob_type域判斷,而正是通過這個(gè)域,Python 實(shí)現(xiàn)了多態(tài)機(jī)制。

真正執(zhí)行的時(shí)候,通過找到實(shí)例對象指向的類型對象的函數(shù)指針來執(zhí)行方法。這里同一個(gè)函數(shù)在不同情況下表現(xiàn)出了不同的行為,這正是多態(tài)的核心所在。

四、引用計(jì)數(shù)

在 Python 中,主要是通過Py_INCREF(op)Py_DECREF(op)兩個(gè)宏來增加和減少一個(gè)對象的引用計(jì)數(shù)。當(dāng)一個(gè)對象的引用計(jì)數(shù)減少到 0 之后, Py_DECREF將調(diào)用該對象的析構(gòu)函數(shù)(deallocator function)(但是不一定真的釋放該對象所占有的內(nèi)存和系統(tǒng)資源),即類型對象中tp_dealloc指向的函數(shù)。例外的是類型對象,PyTypeObject是超越引用計(jì)數(shù)規(guī)則的,永遠(yuǎn)不會被析構(gòu),每一個(gè)對象中指向類型對象的指針不被視為對類型對象的引用。

這有些觀察者模式(Observer)的影子,在ob_refcnt減為 0 之后,將觸發(fā)對象銷毀的事件;從 Python 的對象體系來看,各個(gè)對象又提供了不同的事件處理函數(shù),而事件的注冊動作正是在各個(gè)對象對應(yīng)的類型對象中靜態(tài)完成的。

PyObject中我們看到ob_refcnt是一個(gè) 32 位的整形變量,這實(shí)際是一個(gè)Python所做的假設(shè),即對一個(gè)對象的引用不會超過一個(gè)整形變量的最大值。

五、Python對象的分類

到此這篇關(guān)于python源碼剖析之PyObject詳解的文章就介紹到這了,更多相關(guān)python源碼PyObject內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python源碼學(xué)習(xí)之PyObject和PyTypeObject
  • Python源碼解析之List
  • python opencv人臉識別考勤系統(tǒng)的完整源碼
  • python 制作手機(jī)歸屬地查詢工具(附源碼)
  • python基于tkinter制作無損音樂下載工具(附源碼)
  • Python bsonrpc源碼解讀
  • Python源碼學(xué)習(xí)之PyType_Type和PyBaseObject_Type詳解
  • Python制作腳本幫女朋友搶購清空購物車

標(biāo)簽:通遼 常德 銅川 潛江 株洲 黑龍江 阿里 呂梁

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python源碼剖析之PyObject詳解》,本文關(guān)鍵詞  python,源碼,剖析,之,PyObject,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python源碼剖析之PyObject詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于python源碼剖析之PyObject詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久激情视频| 一区二区三区鲁丝不卡| 欧美变态tickling挠脚心| 亚洲国产视频网站| 欧美午夜电影一区| 亚洲国产一区二区视频| 色婷婷综合久久久久中文 | 久久综合色播五月| 国产在线播放一区三区四| 日韩欧美中文一区二区| 国产成都精品91一区二区三| 国产精品久久久久久久久快鸭 | 欧美视频一二三区| 欧美老女人第四色| 久久精品无码一区二区三区| 国产精品久久久久久久久图文区 | 精品噜噜噜噜久久久久久久久试看| 激情亚洲综合在线| 国产精品国产三级国产普通话99| 日本高清不卡视频| 国产精品18久久久久久久网站| 日韩伦理av电影| 久久精品夜色噜噜亚洲aⅴ| 国产精品乱子久久久久| 欧美xingq一区二区| 亚洲小少妇裸体bbw| 亚洲免费色视频| 亚洲成人在线观看视频| 亚洲一区二区黄色| 日韩午夜在线影院| 成人污视频在线观看| 亚洲国产精品久久久久秋霞影院| 欧美日韩亚洲高清一区二区| 亚洲高清久久久| 2020日本不卡一区二区视频| 91蝌蚪porny九色| 日韩精品每日更新| 亚洲欧美区自拍先锋| 久久久www成人免费无遮挡大片| 日本一区中文字幕| 亚洲乱码国产乱码精品精的特点 | 亚洲乱码日产精品bd| 肉丝袜脚交视频一区二区| 日韩久久一区二区| 亚洲欧美一区二区在线观看| 日韩免费视频一区| 成人亚洲精品久久久久软件| 国产精品久久久久久亚洲毛片 | 欧美日韩高清一区二区不卡| 激情偷乱视频一区二区三区| 亚洲一区二区三区四区的 | 日韩视频一区在线观看| 欧美一区二区高清| 欧美日韩五月天| 欧美一区二区免费| 欧美性欧美巨大黑白大战| 国产在线视频一区二区| 一区二区三区毛片| 国产日韩欧美激情| 欧美成人精品高清在线播放| 亚洲电影一区二区三区| 蜜桃一区二区三区四区| 91福利在线看| 国产精品毛片无遮挡高清| 亚洲午夜在线观看视频在线| 国产成人免费视频一区| 777xxx欧美| 亚洲成av人片一区二区| 亚洲成在人线免费| 国产成人一级电影| 男人的j进女人的j一区| 亚洲国产精品一区二区www| 成人欧美一区二区三区小说 | 韩国一区二区在线观看| 亚洲大片在线观看| 一区二区三区在线免费视频| 国产精品麻豆久久久| 国产欧美日韩视频在线观看| 91精品国产综合久久国产大片| 国产成人亚洲综合a∨婷婷图片| 欧美日韩国产bt| 1区2区3区精品视频| 精品日韩在线观看| 久久久三级国产网站| www激情久久| 91在线免费播放| 亚洲一区视频在线| 日韩一区二区精品| 国产精品自拍三区| 亚洲综合色丁香婷婷六月图片| 欧美夫妻性生活| 国产大陆亚洲精品国产| www久久精品| 成人丝袜视频网| 国产色一区二区| 在线视频欧美区| 日韩福利电影在线| 久久久久国产一区二区三区四区| 国产一区 二区| 亚洲一区二区影院| 亚洲精品一区在线观看| 成人av午夜电影| 日本不卡高清视频| 亚洲欧美一区二区久久| 欧美一卡二卡三卡四卡| 免费久久99精品国产| 欧美日韩你懂的| 亚洲一区二区三区四区的| 国产午夜精品美女毛片视频| 欧美综合亚洲图片综合区| 国产综合成人久久大片91| 亚洲一区二区3| 亚洲免费资源在线播放| 欧美日韩一级二级三级| 国产精品亚洲成人| 国产一区二区三区在线观看免费视频 | 欧美四级电影网| 国产成人在线电影| 精品一区二区在线观看| 亚洲3atv精品一区二区三区| 中文字幕在线观看不卡| 26uuu精品一区二区| 日韩欧美高清在线| 91精品久久久久久久久99蜜臂| 色美美综合视频| 色综合中文字幕| 在线观看国产91| 欧日韩精品视频| 欧美日韩二区三区| 欧美日韩一区二区三区视频 | 欧美三级资源在线| 欧美日韩黄色一区二区| 91精品国产品国语在线不卡 | 国产精品99久久久久久久女警| 久久99精品久久久| 国产99久久久久久免费看农村| 成人午夜免费av| 精品视频123区在线观看| 欧美成人综合网站| 久久精品视频在线看| 国产精品欧美综合在线| 亚洲午夜成aⅴ人片| 五月激情六月综合| 久久99精品国产| 91福利小视频| 久久精品一区二区三区四区| 亚洲欧美成人一区二区三区| 日本亚洲免费观看| 97se亚洲国产综合自在线不卡 | 美国一区二区三区在线播放| 成人爱爱电影网址| 日韩一区二区三区三四区视频在线观看| 日韩欧美区一区二| ...av二区三区久久精品| 蜜桃91丨九色丨蝌蚪91桃色| 国产成人av一区二区三区在线观看| 欧美日韩一级二级| 亚洲欧美aⅴ...| 91香蕉视频mp4| 欧美电视剧在线观看完整版| 亚洲国产成人高清精品| a亚洲天堂av| 中文字幕一区二区视频| 国产成人午夜视频| 日韩精品中文字幕一区 | 26uuu成人网一区二区三区| 一区二区三区四区亚洲| 成人午夜在线播放| 久久精品综合网| 国产91在线观看| 国产精品沙发午睡系列990531| 国产又粗又猛又爽又黄91精品| 精品国产一区二区三区不卡| 丝袜美腿高跟呻吟高潮一区| 欧洲国产伦久久久久久久| 亚洲欧洲日韩一区二区三区| 99精品桃花视频在线观看| 国产精品福利av| 色婷婷av一区二区三区大白胸| 亚洲人成人一区二区在线观看| www.亚洲国产| 亚洲国产裸拍裸体视频在线观看乱了| 在线观看av不卡| 久久99精品一区二区三区三区| 久久久久国产免费免费| 91成人看片片| 激情图片小说一区| 亚洲欧美日韩在线不卡| 欧美男女性生活在线直播观看| 久久精品99国产精品| 国产精品久久久久9999吃药| 91免费视频网| 国精产品一区一区三区mba桃花| 亚洲色图都市小说| 欧美一区二区日韩| 91网页版在线| 国产91精品欧美| 免费在线观看不卡| 亚洲在线免费播放| 中文久久乱码一区二区|