欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python中的類與類型示例詳解

系統 1623 0

1.經典類與新式類

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

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

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

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

2.類的實例與對象

在很多語言中,類的實例與類的對象,只是同一事物的不同名稱。而在Python中,類的對象與類的實例,是完全不同的概念。在本文中,所稱的類對象,是指由class代碼塊執行后創建的類對象,而類的實例則是由類對象所創建的實例。這里只做簡單提及,便于下文理解,要更深入的理解這個概念,可以參考“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中的類與類型示例詳解_第1張圖片

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

Python 3.5.1 運行結果

Python中的類與類型示例詳解_第2張圖片

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

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

修改之前的代碼驗證上述觀點,嘗試讓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張圖片

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

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

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

Python 2.7.10運行結果:

Python中的類與類型示例詳解_第4張圖片

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

4.類的類型

如果說,一個類實例的類型是創建它的類(python 3.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中的類與類型示例詳解_第5張圖片

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

Python 3.5.1運行結果:

Python中的類與類型示例詳解_第6張圖片

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

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

Python中的類與類型示例詳解_第7張圖片

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

注:在運行結果中,Python 2.x 顯示為 ,而 Python 3.x 顯示為 , 僅是顯示方法不同,可以理解為等價,因為在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: .

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

            
print(type(type))
          

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

Python中的類與類型示例詳解_第8張圖片

Python中的類與類型示例詳解_第9張圖片

5.類是Type類的實例

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

            
type([1, 2, 3])
          

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

同樣的

            
type(list)
          

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

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

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

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

6.有趣的循環

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

通過以下代碼來驗證

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

運行結果:

Python中的類與類型示例詳解_第10張圖片

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

總結

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 性高湖久久久久久久久aaaaa | 日本一区二区三区四区在线观看 | 操你啦免费视频 | 婷婷激情综合五月天 | 欧美日韩精品一区二区在线播放 | 免费午夜电影 | 欧洲毛片 | JLZZJLZZ亚洲乱熟在线播放 | 久久久高清免费视频 | 色屁屁www影院免费观看视频 | 久草免费小视频 | 爱性久久久久久久 | 亚洲 欧美 另类 综合 偷拍 | 婷婷在线五月 | 国产精品精品视频一区二区三区 | 婷婷成人亚洲 | 日韩av中文 | 一区二区三区视频在线播放 | 东京一热本色道久久爱 | 久久精品a一级国产免视看成人 | 色综合久久中文字幕综合网 | 玖玖啪 | 亚洲一区中文字幕 | 免费精品美女久久久久久久久久 | 欧美福利一区二区三区 | 色多多视频导航 | 91麻豆精品久久久久蜜臀 | 日本网站在线播放 | 91在线播放网站 | 亚洲国产精品久久久久网站 | 色综合天天综一个色天天综合网 | 日本久久精品视频 | 亚洲美女网站 | 成人免费观看国产高清 | 韩国三级中文字幕hd久久精品 | 日日插夜夜操 | 欧美—级v免费大片 | 高清国产一区二区三区四区五区 | 日本三级香港三级网站 | 男女视频在线观看免费 | 欧美激情欧美激情在线五月 |