最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的類與類型示例詳解

 更新時間:2019年07月10日 11:26:46   作者:BlackMatrix  
這篇文章主要給大家介紹了關于Python中類與類型的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

1.經(jīng)典類與新式類

在了解Python的類與類型前,需要對Python的經(jīng)典類(classic classes)與新式類(new-style classes)有個簡單的概念。

在Python 2.x及以前的版本中,由任意內置類型派生出的類(只要一個內置類型位于類樹的某個位置),都屬于“新式類”,都會獲得所有“新式類”的特性;反之,即不由任意內置類型派生出的類,則稱之為“經(jīng)典類”。

“新式類”和“經(jīng)典類”的區(qū)分在Python 3.x之后就已經(jīng)不存在,在Python 3.x之后的版本,因為所有的類都派生自內置類型object(即使沒有顯示的繼承object類型),即所有的類都是“新式類”。

官方文檔https://www.python.org/doc/newstyle/

2.類的實例與對象

在很多語言中,類的實例與類的對象,只是同一事物的不同名稱。而在Python中,類的對象與類的實例,是完全不同的概念。在本文中,所稱的類對象,是指由class代碼塊執(zhí)行后創(chuàng)建的類對象,而類的實例則是由類對象所創(chuàng)建的實例。這里只做簡單提及,便于下文理解,要更深入的理解這個概念,可以參考“python一切皆對象”的相關知識。

3.類實例的類與類型

嘗試分別在Python 2.x 和 3.x 版本中運行如下代碼:

class A():pass
class B():pass

a = A()
b = B()

if __name__ == '__main__':
  print(type(a))
  print(type(b))
  print(type(a) == type(b))
  print(a.__class__)
  print(b.__class__)
  print(a.__class__ == b.__class__)

Python 2.6.9 及 2.7.10 的運行結果:

在Python 2.x及以前的版本,所有經(jīng)典類的實例都是“instance”(實例類型)。所以比較經(jīng)典類實例的類型(type)毫無意義,因為所有的經(jīng)典類實例都是instance類型,比較的結果通常為True。更多情況下需要比較經(jīng)典類實例的__class__屬性來獲得我們想要的結果(或使用isinstance函數(shù))。

Python 3.5.1 運行結果

在Python 3.x及之后的版本,類和類型已經(jīng)合并。類實例的類型是這個實例所創(chuàng)建自的類(通常是和類實例的__class__相同),而不再是Python 2.x版本中的“instance”實例類型。

需要注意的是,在Python 2.x版本中,“經(jīng)典類的實例都是instance類型”,這個結論只適用于經(jīng)典類。對新式類和內置類型的實例,它們的類型要更加明確。

修改之前的代碼驗證上述觀點,嘗試讓class a 和 class b 顯示繼承自object,成為“新式類”。

class A(object):pass
class B(object):pass

a = A()
b = B()

if __name__ == '__main__':
  print(type(a))
  print(type(b))
  print(type(a) == type(b))
  print(a.__class__)
  print(b.__class__)
  print(a.__class__ == b.__class__)

Python 2.7.10 運行結果:

代碼運行結果和Python 3.x是完全相同的,可以看出Python 2.x 新式類實例的類型就是這個實例所創(chuàng)建自的類。同時進一步印證在Python 3.x中所有的類都是新式類(顯示或隱式繼承自object類)。

接著對內置類型進行驗證,嘗試運行以下代碼

print(type([1, 2, 3]))

Python 2.7.10運行結果:

可以看出,內置類型實例的類型,也是同新式類一樣,是這個實例所創(chuàng)建自的類。在示例代碼中,我們創(chuàng)建了一個list,所以實例的類型為list類型。

4.類的類型

如果說,一個類實例的類型是創(chuàng)建它的類(python 3.x),那一個類的類型又是什么???

繼續(xù)使用代碼嘗試驗證:

class A():pass
class B():pass

if __name__ == '__main__':
  print(type(A))
  print(type(B))
  print(type(A) == type(B))

Python 2.7.10 運行結果:

從運行結果我們可以看出,在Python 2.x 中,經(jīng)典類的類型都是classobj。type(A) == type(B)結果為True,說明它們是同一種類型。

Python 3.5.1運行結果:

從運行結果我們可以看出,所有的類型都是type類,再次印證在Python 3.x 類與類型已經(jīng)完全合并,類即類型,類型即類。

再次修改代碼,使 class A 和 B 顯式繼承自 object,成為新式類,再在Python 2.7.10 下運行查看結果:

運行結果顯而易見,和Python 3.x 是一樣的,因為它們都是新式類。

注:在運行結果中,Python 2.x 顯示為 <type 'type'>,而 Python 3.x 顯示為<class 'type'>, 僅是顯示方法不同,可以理解為等價,因為在Python 3.x類即類型。

參考官方文檔:https://docs.python.org/3/library/stdtypes.html#bltin-type-objects

Type objects represent the various object types. An object's type is accessed by the built-in functiontype(). There are no special operations on types. The standard moduletypesdefines names for all standard built-in types.

Types are written like this:<class'int'>.

再來進行一個有趣的嘗試:

print(type(type))

在python 2.x 和 3.x 運行結果都是一樣的,type類型本身也是類(新式類和內置類型的類與類型已經(jīng)合并),它自己也是type類型。

5.類是Type類的實例

有上文的測試可以得知:所有的類型都是type類。從另一個角度理解,類就是type類的實例,所有的新式類,都是由type類實例化創(chuàng)建而來,并且顯式或隱式繼承自object。

type([1, 2, 3])

得到運行結果:<class 'list'>,說明[1, 2, 3]這個list是list類的實例。

同樣的

type(list)

得到運行結果:<class 'type'>,也可以說明list這個類是type類的實例。

通過調用__class__屬性可以得到同樣的結果:

list.__class__
[1, 2, 3].__class__

說明類對象是type類的實例。

6.有趣的循環(huán)

前文提到,在Python 3.x 中,所有的類都顯式或隱式的派生自object類,type類也不例外。類型自身派生自object類,而object類派生自type,二者組成了一個循環(huán)的關系。

通過以下代碼來驗證

isinstance(object, type)
isinstance(type, object)

運行結果:

從運行結果可以看出object是type類型, type類型也是object類型

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • python解決循環(huán)依賴的問題分析

    python解決循環(huán)依賴的問題分析

    在使用python開發(fā)過程中在引入其他模塊時可能都經(jīng)歷過一個異常就是循環(huán)引用most likely due to a circular import,它的意思就是A引用了B,反過來B又引用了A,導致出現(xiàn)了循環(huán)引用異常,下面來介紹如何避免循環(huán)引用異常,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • python對ip地址進行排序、分類的方法詳解

    python對ip地址進行排序、分類的方法詳解

    這篇文章主要介紹了python對ip地址進行排序、分類的方法詳解,IP協(xié)議全稱為“網(wǎng)際互連協(xié)議Internet?Protocol”,IP協(xié)議是TCP/IP體系中的網(wǎng)絡層協(xié)議,需要的朋友可以參考下
    2023-07-07
  • NumPy對數(shù)組按索引查詢實戰(zhàn)方法總結

    NumPy對數(shù)組按索引查詢實戰(zhàn)方法總結

    數(shù)組的高級操作主要是組合數(shù)組,拆分數(shù)組,tile數(shù)組和重組元素,下面這篇文章主要給大家介紹了關于NumPy對數(shù)組按索引查詢的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • python分析網(wǎng)頁上所有超鏈接的方法

    python分析網(wǎng)頁上所有超鏈接的方法

    這篇文章主要介紹了python分析網(wǎng)頁上所有超鏈接的方法,涉及Python使用urllib模塊操作頁面超鏈接的技巧,需要的朋友可以參考下
    2015-05-05
  • Python中pip更新和三方插件安裝說明

    Python中pip更新和三方插件安裝說明

    本篇文章給大家分享了Python中pip更新和三方插件安裝的相關知識點內容,有興趣的朋友可以參考學習下。
    2018-07-07
  • Python讀取Windows和Linux的CPU、GPU、硬盤等部件溫度的讀取方法

    Python讀取Windows和Linux的CPU、GPU、硬盤等部件溫度的讀取方法

    本文詳細介紹了如何使用Python在Windows和Linux系統(tǒng)上通過OpenHardwareMonitor和psutil庫讀取CPU、GPU等部件的溫度,包括Windows下的兩種方法以及Linux下的簡單實現(xiàn),感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02
  • python實現(xiàn)文字轉語音的項目實踐

    python實現(xiàn)文字轉語音的項目實踐

    pyttsx3是一個Python庫,用于文字轉語音的功能,它可以將文本轉換為語音,并使用不同的音頻引擎進行輸出,本文就來詳細的介紹一下用法,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • python在linux環(huán)境下安裝skimage的示例代碼

    python在linux環(huán)境下安裝skimage的示例代碼

    這篇文章主要介紹了python在linux環(huán)境下安裝skimage,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python input()函數(shù)用法大全

    Python input()函數(shù)用法大全

    input()函數(shù)獲取用戶輸入數(shù)據(jù),實現(xiàn)用戶交互,本文重點給大家介紹Python input()函數(shù)用法大全,感興趣的朋友一起看看吧
    2021-04-04
  • python自制簡易mysql連接池的實現(xiàn)示例

    python自制簡易mysql連接池的實現(xiàn)示例

    本文主要介紹了python自制簡易mysql連接池的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論

连云港市| 锡林浩特市| 阿拉善左旗| 吉隆县| 乐业县| 建瓯市| 嘉义县| 西藏| 华坪县| 成安县| 灌阳县| 荥阳市| 沙坪坝区| 柳江县| 禄劝| 汉川市| 西林县| 包头市| 杭州市| 铜梁县| 霍山县| 荥阳市| 景德镇市| 治多县| 广东省| 武汉市| 茶陵县| 绍兴市| 洪江市| 岳阳县| 孝感市| 栾川县| 马龙县| 桐柏县| 阿拉善左旗| 全南县| 万荣县| 繁峙县| 荥经县| 东乌珠穆沁旗| 五河县|