日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片

Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)

文章圖片


引言前面的文章中 , 我們提到了在Python中一切皆對象 , 理所當(dāng)然的 , 函數(shù)和類也是對象 , 所以 , 函數(shù)和類在Python中也是一等公民 。
既然 , 一切皆對象 , 對象與類的關(guān)系是實例化與抽象的關(guān)系 。
那么 , 這些對象 , 是什么類型的呢 , 也就是說 , 是由什么類實例化出來的呢?
這些對象所屬的類之間的繼承關(guān)系又是怎樣的?
今天這篇文章中 , 我們來重點探究一下 , Python中的標(biāo)準(zhǔn)類型層次結(jié)構(gòu) , 從而回答上面的兩個問題 。
在開始之前 , 需要再次明確區(qū)分一下“繼承”與“實例化”這兩種關(guān)系的區(qū)別 , 不然可能會不小心被繞進(jìn)去 , 畢竟類也是對象 , 可以稱之為類對象 。

  • 繼承:是類與類之間的關(guān)系 , 子類繼承父類 , 這時候 , 我們只關(guān)注類的概念 , 暫時不考慮類對象的概念 。
  • 實例化:是類與對象之間的關(guān)系 , 類可以理解為一個模板 , 是一個抽象化的實體 , 對象是基于類這個模板實例化出來的具體的對象 。 由于類也是對象 , 所以 , 談到實例化時 , 我們也會探究類對象是有什么類實例化來的 。
基礎(chǔ)知識為了更好的能看到對象與類、類與類之間的關(guān)系 , 我們需要一些前置知識 。 對這些知識 , 只需要知道、會用即可 , 這里不需要深究 , 后面多用 , 會有更多地體會 。
type前面的文章中 , 我們經(jīng)常提到使用type()函數(shù) , 可以查看一個對象的類型 , 這個說法其實是不對的 。 在今天這篇文章中 , 我們要轉(zhuǎn)變一下觀念了 , type不是函數(shù) , 而是一個類!首先看下builtins中的type定義:

如果沒有看過定義 , 估計有不少初學(xué)者或者新手把type當(dāng)作一個內(nèi)置的函數(shù) 。

看定義中的說明文檔 , 我們發(fā)現(xiàn)type這個類的初始化函數(shù) , 可以獲取類對象 , 初始化函數(shù)接收的參數(shù) , 可以是一個對象 , 也可以是更多的參數(shù) 。 接下來 , 簡單演示一下type類的用法:

執(zhí)行結(jié)果:

此外 , 從文檔看出 , 我們還可以通過type自定義類對象:

屬性__class__我們知道對象是由類實例化的 , 前面 , 我們通過type這個類找到了實例化某個對象的類 。 如果 , 不借助type , 我們能否通過一個對象本身找到實例化它的類呢?答案是肯定的 。
在Python中 , 對象都有一個特殊的屬性:class , 通過這個屬性 , 我們也可以獲得實例化該對象的類對象:

執(zhí)行結(jié)果:

既然__class__屬性指向了一個類對象 , 我們自然可以通過__class__屬性進(jìn)行實例化對象的操作 。
屬性__bases__不管是type類 , 還是__class__屬性 , 我們要找的都是對象與類之間的關(guān)系 , 也就是實例化關(guān)系 。
接下來 , 我們來看一下類與類之間的繼承關(guān)系 。
由于 , 類也是對象 , 也就是類對象 , 類對象也是有自己的屬性的 , 其中__bases__就是指向這個類對象的父類對象的屬性 。
由于Python中的面向?qū)ο笫侵С侄嗬^承的 , 一個子類可以有多個父類 , 所以__bases__屬性 , 屬性名是一個復(fù)數(shù)的形式 , 該屬性是一個元組:

執(zhí)行結(jié)果:

需要注意的是 , 只有類對象才有__bases__屬性 , 普通對象必須先找到自身的類對象 , 才能進(jìn)一步找到父類 。
可以結(jié)合前面通過type類自定義類 , 來進(jìn)一步看這個類對象的繼承關(guān)系:

執(zhí)行結(jié)果:

Python標(biāo)準(zhǔn)類型層次結(jié)構(gòu)先說幾個關(guān)鍵的結(jié)論:
1、Python中所有的類對象 , 都是通過type類實例化的;
2、Python中所有的類對象的最頂層的父類都是object;
3、object這個類對象是由type類實例化的;
4、type這個類對象是由type類自己實例化的 。
有點繞 , 暫時有個概念 , 以實踐慢慢消化理解吧 。
關(guān)于Python標(biāo)準(zhǔn)類型的層次結(jié)構(gòu)圖 , 附在本文的結(jié)尾 。
接下來 , 通過代碼演示常見標(biāo)準(zhǔn)類型的層次結(jié)構(gòu):

執(zhí)行結(jié)果:


Python中的標(biāo)準(zhǔn)類型層次結(jié)構(gòu)示意圖:
由于篇幅有限 , 并沒有涵蓋Python中的完整的類型層次結(jié)構(gòu) 。
【Python番外篇:標(biāo)準(zhǔn)類型層次結(jié)構(gòu)】

    推薦閱讀