国产探花免费观看_亚洲丰满少妇自慰呻吟_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的構造函數來創建類型對象。為了說明語法還是舉個例子:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额尔古纳市| 沐川县| 黄大仙区| 乌拉特中旗| 蒙阴县| 合山市| 定陶县| 城步| 禹城市| 北碚区| 类乌齐县| 调兵山市| 辉南县| 达尔| 安龙县| 兰考县| 漳州市| 诸暨市| 壶关县| 兴化市| 大港区| 永济市| 黄陵县| 海阳市| 高清| 江阴市| 石门县| 玛纳斯县| 高安市| 察雅县| 二连浩特市| 仙桃市| 蓬溪县| 边坝县| 青岛市| 安达市| 红河县| 长岛县| 崇义县| 信宜市| 泸水县|