国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中類型關系和繼承關系實例詳解

2020-02-23 01:24:28
字體:
來源:轉載
供稿:網友

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

如果一個對象A持有另一個對象B的ID,那么檢索到A之后就可以檢索到B,我們就說存在一個A到B的導航。這種導航關系使得Python中所有對象之間形成了一個復雜的網絡結構。

Python程序的運行包括:

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

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

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

如何構造一個類型

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

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

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

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

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

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

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

繼承關系

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 响水县| 铜山县| 仲巴县| 蒙山县| 丰宁| 河源市| 磐安县| 新竹县| 青冈县| 沙坪坝区| 三都| 杭锦后旗| 大冶市| 南漳县| 五河县| 留坝县| 洛浦县| 广东省| 万荣县| 潼南县| 故城县| 平邑县| 久治县| 克什克腾旗| 青冈县| 泽州县| 海宁市| 扶沟县| 永川市| 石城县| 清丰县| 英山县| 通化县| 娄底市| 永新县| 明溪县| 水富县| 玉溪市| 崇信县| 城固县| 隆尧县|