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

首頁 > 編程 > Python > 正文

一篇文章搞懂Python的類與對(duì)象名稱空間

2020-02-16 00:03:03
字體:
供稿:網(wǎng)友

代碼塊的分類

python中分幾種代碼塊類型,它們都有自己的作用域,或者說名稱空間:

文件或模塊整體是一個(gè)代碼塊,名稱空間為全局范圍

函數(shù)代碼塊,名稱空間為函數(shù)自身范圍,是本地作用域,在全局范圍的內(nèi)層

函數(shù)內(nèi)部可嵌套函數(shù),嵌套函數(shù)有更內(nèi)一層的名稱空間

類代碼塊,名稱空間為類自身

類中可定義函數(shù),類中的函數(shù)有自己的名稱空間,在類的內(nèi)層 類的實(shí)例對(duì)象有自己的名稱空間,和類的名稱空間獨(dú)立 類可繼承父類,可以鏈接至父類名稱空間

正是這一層層隔離又連接的名稱空間將變量、類、對(duì)象、函數(shù)等等都組織起來,使得它們可以擁有某些屬性,可以進(jìn)行屬性查找。

本文詳細(xì)解釋類和對(duì)象涉及的名稱空間,屬于純理論類的內(nèi)容,有助于理解python面向?qū)ο蟮募?xì)節(jié)。期間會(huì)涉及全局和本地變量作用域的查找規(guī)則,如有不明白之處,可先看文章:Python作用域詳述

一個(gè)概括全文的示例

以下是一個(gè)能在一定程度上概括全文的示例代碼段:

x = 11 # 全局變量xdef f(): # 全局變量f print(x) # 引用全局變量xdef g(): # 全局變量g x = 22 # 定義本地變量x print(x) # 引用本地變量xclass supcls(): # 全局變量supcls x = 33 # 類變量x def m(self): # 類變量m,類內(nèi)函數(shù)變量self x = 44 # 類內(nèi)函數(shù)變量x self.x = 55 # 對(duì)象變量xclass cls(supcls): # 全局變量cls x = supcls.x # 引用父類屬性x,并定義cls類屬性x def n(self): # 類變量n self.x = 66 # 對(duì)象變量x

如果能理解上面的每個(gè)x屬于哪個(gè)作用域、哪個(gè)名稱空間,本文內(nèi)容基本上就理解了。

類的名稱空間

下面有一個(gè)類,類中有類屬性x、y,有類方法m和n。

class supcls(): x = 3 y = 4 def m(self): x = 33 self.x = 333 self.y = 444 self.z = 555 def n(self): return self.x, self.y, self.z

當(dāng)python解釋到supcls代碼塊后,知道這是一個(gè)類,類有自己的名稱空間。所以,當(dāng)知道了這個(gè)類里面有x、y、m、n后,這幾個(gè)屬性都會(huì)放進(jìn)類supcls的名稱空間中。

如下圖:

在上圖中,類的名稱空間中有屬性x、y、m和n,它們都稱為類屬性。需要說明的是,在python中,函數(shù)變量m、n和普通變量沒什么區(qū)別,僅僅只是它保存了指向函數(shù)體的地址,函數(shù)體即上圖中用func m和func n所表示的對(duì)象。

因?yàn)橛忻Q空間,可以直接使用完全限定名稱去訪問這個(gè)名稱空間中的內(nèi)容。例如:

print(supcls.x)print(supcls.y)print(supcls.m)print(supcls.n)

輸出結(jié)果:

3
4
<function supcls.m at 0x02B83738>
<function supcls.n at 0x02B836F0>

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柘城县| 丰顺县| 华蓥市| 宁安市| 美姑县| 白沙| 彭阳县| 安化县| 益阳市| 盐山县| 南华县| 隆尧县| 大足县| 彰化县| 依兰县| 措美县| 大英县| 普宁市| 靖远县| 旌德县| 阳新县| 仲巴县| 永泰县| 新津县| 长丰县| 怀化市| 池州市| 贵州省| 阳新县| 江津市| 桃江县| 鲁山县| 凭祥市| 灵武市| 收藏| 华蓥市| 宁化县| 富平县| 临城县| 南川市| 留坝县|