欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的類與類型示例詳解

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

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

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

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

“新式類”和“經(jīng)典類”的區(qū)分在Python 3.x之后就已經(jīng)不存在,在Python 3.x之后的版本,因?yàn)樗械念惗寂缮詢?nèi)置類型object(即使沒(méi)有顯示的繼承object類型),即所有的類都是“新式類”。

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

2.類的實(shí)例與對(duì)象

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

3.類實(shí)例的類與類型

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

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 的運(yùn)行結(jié)果:

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

Python 3.5.1 運(yùn)行結(jié)果

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

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

修改之前的代碼驗(yàn)證上述觀點(diǎn),嘗試讓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 運(yùn)行結(jié)果:

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

接著對(duì)內(nèi)置類型進(jìn)行驗(yàn)證,嘗試運(yùn)行以下代碼

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

Python 2.7.10運(yùn)行結(jié)果:

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

4.類的類型

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

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

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

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

Python 2.7.10 運(yùn)行結(jié)果:

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

Python 3.5.1運(yùn)行結(jié)果:

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

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

運(yùn)行結(jié)果顯而易見(jiàn),和Python 3.x 是一樣的,因?yàn)樗鼈兌际切率筋悺?/p>

注:在運(yùn)行結(jié)果中,Python 2.x 顯示為 <type 'type'>,而 Python 3.x 顯示為<class 'type'>, 僅是顯示方法不同,可以理解為等價(jià),因?yàn)樵赑ython 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'>.

再來(lái)進(jìn)行一個(gè)有趣的嘗試:

print(type(type))

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

5.類是Type類的實(shí)例

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

type([1, 2, 3])

得到運(yùn)行結(jié)果:<class 'list'>,說(shuō)明[1, 2, 3]這個(gè)list是list類的實(shí)例。

同樣的

type(list)

得到運(yùn)行結(jié)果:<class 'type'>,也可以說(shuō)明list這個(gè)類是type類的實(shí)例。

通過(guò)調(diào)用__class__屬性可以得到同樣的結(jié)果:

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

說(shuō)明類對(duì)象是type類的實(shí)例。

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

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

通過(guò)以下代碼來(lái)驗(yàn)證

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

運(yùn)行結(jié)果:

從運(yùn)行結(jié)果可以看出object是type類型, type類型也是object類型

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 詳解Python中openpyxl模塊基本用法

    詳解Python中openpyxl模塊基本用法

    這篇文章主要介紹了Python中openpyxl模塊基本用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • PyQt 線程類 QThread使用詳解

    PyQt 線程類 QThread使用詳解

    QThread是我們將要詳細(xì)介紹的第一個(gè)類。它也是 Qt 線程類中最核心的底層類。由于 PyQt 的跨平臺(tái)特性,QThread要隱藏掉所有平臺(tái)相關(guān)的代碼。
    2017-07-07
  • Python Socket編程之多線程聊天室

    Python Socket編程之多線程聊天室

    這篇文章主要為大家詳細(xì)介紹了Python Socket編程之多線程聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python?輕松實(shí)現(xiàn)可視化大屏

    Python?輕松實(shí)現(xiàn)可視化大屏

    對(duì)于從事數(shù)據(jù)領(lǐng)域的小伙伴來(lái)說(shuō),當(dāng)需要闡述自己觀點(diǎn)、展示項(xiàng)目成果時(shí),我們需要在最短時(shí)間內(nèi)讓別人知道你的想法。我相信單調(diào)乏味的語(yǔ)言很難讓別人快速理解。最直接有效的方式就是將數(shù)據(jù)進(jìn)行可視化展現(xiàn)
    2022-01-01
  • 決策樹(shù)的python實(shí)現(xiàn)方法

    決策樹(shù)的python實(shí)現(xiàn)方法

    這篇文章主要介紹了決策樹(shù)的python實(shí)現(xiàn)方法,詳細(xì)分析了決策樹(shù)的優(yōu)缺點(diǎn)及算法思想并以完整實(shí)例形式講述了Python實(shí)現(xiàn)決策樹(shù)的方法,具有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • PyTorch中permute的用法詳解

    PyTorch中permute的用法詳解

    今天小編就為大家分享一篇PyTorch中permute的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python如何解決secure_filename對(duì)中文不支持問(wèn)題

    Python如何解決secure_filename對(duì)中文不支持問(wèn)題

    最近使用到了secure_filename,然后悲劇的發(fā)現(xiàn)中文居然不展示出來(lái),本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下
    2021-07-07
  • Python裝飾器代碼詳解

    Python裝飾器代碼詳解

    這篇文章主要介紹了python 一篇文章搞懂裝飾器所有用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • Python輸出列表(List)不帶中括號(hào)和引號(hào)的問(wèn)題及解決方法

    Python輸出列表(List)不帶中括號(hào)和引號(hào)的問(wèn)題及解決方法

    這篇文章主要介紹了Python輸出列表(List)不帶中括號(hào)和引號(hào)的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Python?時(shí)間操作datetime詳情

    Python?時(shí)間操作datetime詳情

    這篇文章主要介紹了?Python?時(shí)間操作datetime,datetime?模塊提供處理時(shí)間和日期的多種類,簡(jiǎn)單方便,下面文章將詳細(xì)介紹其內(nèi)容,需要的朋友可以參考一下
    2021-11-11

最新評(píng)論