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

Python中類型關(guān)系和繼承關(guān)系實例詳解

 更新時間:2015年05月25日 15:07:44   作者:惟愿蓮心不染塵  
這篇文章主要介紹了Python中類型關(guān)系和繼承關(guān)系,較為詳細(xì)的分析了Python中類型關(guān)系和繼承關(guān)系的原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文詳細(xì)介紹了Python中類型關(guān)系和繼承關(guān)系。分享給大家供大家參考。具體分析如下:

如果一個對象A持有另一個對象B的ID,那么檢索到A之后就可以檢索到B,我們就說存在一個A到B的導(dǎo)航。這種導(dǎo)航關(guān)系使得Python中所有對象之間形成了一個復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)。

Python程序的運行包括:

1. 修改這個網(wǎng)絡(luò)結(jié)構(gòu);
2. 執(zhí)行有副作用的代碼對象(code object或者說bytecode,見Python Language Reference 3.2)
(副作用是指影響Python虛擬機之外的設(shè)備,這些代碼都是用C或者別的語言寫的,Python寫的代碼只能完成第一步的功能。print語句除外。)

Python對象之間有兩種導(dǎo)航關(guān)系:繼承關(guān)系和類型關(guān)系,是Python中最基本的關(guān)系。類型關(guān)系說明一個對象是通過哪個對象創(chuàng)建的;繼承關(guān)系說明對象之間的父子關(guān)系,這種父子關(guān)系在名字的解析過程中起到作用。這里我首先說New Style類之間的這兩種關(guān)系,掌握了New Style類的關(guān)系后,再來說明Classic類就容易了。

首先需要說明一下的是內(nèi)置模塊中的type是什么。大家都知道type可以用來判斷一個對象的類型,好像是一個函數(shù)。實際上在2.2中type是一個類,而且不是普通的類,是一個可以創(chuàng)建類的類,稱為元類。你運行type(type)試一下,打印的是。type類是Python類型系統(tǒng)的核心。用type作為一個判斷類型的函數(shù)使用是比較特殊的情況,或許是由歷史原因造成的,用typeof或許更合適。

如何構(gòu)造一個類型

你肯定知道是用class語句。但是實際上,在Python核心看來,只有一種方式,那就是調(diào)用type的構(gòu)造函數(shù)(因為type是一個類型)。當(dāng)運行:

class A(object): 
 def f(self): print 1

Python解析器就會執(zhí)行如下代碼所示功能:

def f(self): print 1
A=type('A', (object,), ) # 參數(shù)為(名字, 父類tuple,成員dict)
del f

兩者效果幾乎是一樣的,你可以試一下。

類型關(guān)系的確定除了使用type之外,還可以使用__class__屬性。如:

class A(object): pass
a=A()     
a.__class__ # 'class __main__.A'
A.__class__ # 'type '
type.__class__ # 'type '
type.__class__.__class__ # 'type '
type.__class__ is type.__class.__class__ # True

繼承關(guān)系

繼承關(guān)系只發(fā)生在類型之間,繼承關(guān)系構(gòu)成一個有向圖。所有的類型都是從object繼承來的。“所有的”當(dāng)然也包括type。object的父類還是object。object作為一個類型對象也是有其類型的,這個類型就是type。所以object和type之間的關(guān)系就好比先有雞還是先有蛋的問題了:type是從object繼承的(繼承關(guān)系);object是由type生成的(類型關(guān)系)。通過issubclass或者_(dá)_bases__屬性來判斷兩個類之間的繼承關(guān)系。

那么從type繼承意味著什么呢?那意味著這個類的類型是type,同時父類也是type。但是這種做法在一般的編程中是沒有什么意義的(卻是meta programmming的核心)。因為一般都用class語句,而不是通過調(diào)用type的構(gòu)造函數(shù)來創(chuàng)建類型對象。為了說明語法還是舉個例子:

class mytype(type): pass
A=mytype('A', (object,), {}) # 
del f
A.__class__ # class '__main__.mytype',元類為mytype
mytype.__class__ # 'type '

在用class定義一個類時,會間接調(diào)用type的構(gòu)造函數(shù)。但是通過設(shè)置__metaclass__屬性,可以不去調(diào)用type,而是調(diào)用type的子類。如:

class A(object):
 __metaclass__ = mytype
A.__class__ # class '__main__.mytype' ,和上面的方式結(jié)果一樣。

由此,Python對象的類型關(guān)系組成了一個樹型結(jié)構(gòu),其中type處于樹的根部,由type或者type的子類構(gòu)造的類型,包括class定義的類(間接調(diào)用type),調(diào)用type、type的子類構(gòu)造函數(shù)創(chuàng)建的類,int list等系統(tǒng)定義類型處于中間節(jié)點,葉節(jié)點為instance對象。type本身的類型是什么呢?還是type。這和根目錄的父目錄還是根目錄是一樣的。

Classic類不同于New Style類的地方就是當(dāng)用class創(chuàng)建一個類時,不是間接調(diào)用type,而是間接調(diào)用types.ClassType,而types.ClassType是由type創(chuàng)建的。

class A: pass
type(A) # type 'classobj',注意沒有__class__屬性。
type(A) is types.ClassType # True
types.ClassType.__class__ # 'type'

希望本文所述對大家的Python程序設(shè)計有所幫助。

相關(guān)文章

  • python中copy()與deepcopy()的區(qū)別小結(jié)

    python中copy()與deepcopy()的區(qū)別小結(jié)

    接觸python有一段時間了,一直沒有系統(tǒng)的學(xué)習(xí)過,也對copy,deepcoy傻傻的分不清,故抽出時間來理一下。 下面這篇文章主要給大家介紹了關(guān)于python中copy()與deepcopy()的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • 詳解Python常用標(biāo)準(zhǔn)庫之時間模塊time和datetime

    詳解Python常用標(biāo)準(zhǔn)庫之時間模塊time和datetime

    time和datetime是Python中常用的兩個時間模塊,本文將通過示例詳細(xì)為大家講講二者的使用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2022-05-05
  • python處理圖片之PIL模塊簡單使用方法

    python處理圖片之PIL模塊簡單使用方法

    這篇文章主要介紹了python處理圖片之PIL模塊簡單使用方法,涉及Python使用PIL模塊實現(xiàn)針對圖片的銳化、繪制直線、繪制橢圓等相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python設(shè)計模式結(jié)構(gòu)型享元模式

    Python設(shè)計模式結(jié)構(gòu)型享元模式

    這篇文章主要介紹了Python享元模式,享元模式即Flyweight Pattern,指運用共享技術(shù)有效地支持大量細(xì)粒度的對象,下面和小編一起進(jìn)入文章了解更多詳細(xì)內(nèi)容吧
    2022-02-02
  • 淺析Python 責(zé)任鏈設(shè)計模式

    淺析Python 責(zé)任鏈設(shè)計模式

    這篇文章主要介紹了Python 責(zé)任鏈設(shè)計模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python 設(shè)計模式,感興趣的朋友可以了解下
    2020-09-09
  • 互斥鎖解決 Python 中多線程共享全局變量的問題(推薦)

    互斥鎖解決 Python 中多線程共享全局變量的問題(推薦)

    這篇文章主要介紹了互斥鎖解決 Python 中多線程共享全局變量的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • pyqt彈出新對話框,以及關(guān)閉對話框獲取數(shù)據(jù)的實例

    pyqt彈出新對話框,以及關(guān)閉對話框獲取數(shù)據(jù)的實例

    今天小編就為大家分享一篇pyqt彈出新對話框,以及關(guān)閉對話框獲取數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python實現(xiàn)畫一顆樹和一片森林

    python實現(xiàn)畫一顆樹和一片森林

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)畫一顆樹和一片森林,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 使用Python實現(xiàn)給企業(yè)微信發(fā)送消息功能

    使用Python實現(xiàn)給企業(yè)微信發(fā)送消息功能

    本文將介紹如何使用python3給企業(yè)微信發(fā)送消息,文中有詳細(xì)的圖文解說及代碼示例,對正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-12-12
  • python語音信號處理詳細(xì)教程

    python語音信號處理詳細(xì)教程

    在深度學(xué)習(xí)中,語音的輸入都是需要處理的,下面這篇文章主要給大家介紹了關(guān)于python語音信號處理的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評論