麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Python基礎之封裝

Python基礎之封裝

來源:千鋒教育
發布人:xqq
時間: 2023-11-08 04:12:25 1699387945

一、什么是封裝

在程序設計中,封裝(Encapsulation)是對具體對象的一種抽象,即將某些部分隱藏起來,在程序外部看不到,其

含義是其他程序無法調用。

要了解封裝,離不開“私有化”,就是將類或者是函數中的某些屬性限制在某個區域之內,外部無法調用。

二、為什么要封裝

封裝數據的主要原因是:保護隱私(把不想別人知道的東西封裝起來)

封裝方法的主要原因是:隔離復雜度(比如:電視機,我們看見的就是一個黑匣子,其實里面有很多電器元件,對于

用戶來說,我們不需要清楚里面都有些元件,電視機把那些電器元件封裝在黑匣子里,提供給用戶的只是幾個按鈕接口,

通過按鈕就能實現對電視機的操作。)

提示:在編程語言里,對外提供的接口(接口可理解為了一個入口),就是函數,稱為接口函數,這與接口的概念還

不一樣,接口代表一組接口函數的集合體。

三、封裝分為兩個層面

封裝其實分為兩個層面,但無論哪種層面的封裝,都要對外界提供好訪問你內部隱藏內容的接口(接口可以理解為入

口,有了這個入口,使用者無需且不能夠直接訪問到內部隱藏的細節,只能走接口,并且我們可以在接口的實現上附加更

多的處理邏輯,從而嚴格控制使用者的訪問)

第一個層面的封裝(什么都不用做):創建類和對象會分別創建二者的名稱空間,我們只能用類名.或者obj.的方式去

訪問里面的名字,這本身就是一種封裝。

print(m1.brand)#實例化對象(m1.)

print(motor_vehicle.tag)#類名(motor_vehicle.)

-------------輸出結果--------------

春風

fueloil

注意:對于這一層面的封裝(隱藏),類名.和實例名.就是訪問隱藏屬性的接口

第二個層面的封裝:類中把某些屬性和方法隱藏起來(或者說定義成私有的),只在類的內部使用、外部無法訪問,或

者留下少量接口(函數)供外部訪問。

Python中私有化的方法也比較簡單,即在準備私有化的屬性(包括方法、數據)名字前面加兩個下劃線即可。

類中所有雙下劃線開頭的名稱如__x都會自動變形成:_類名__x的形式:

classA:

__N=0#類的數據屬性就應該是共享的,但是語法上是可以把類的數據屬性設置成私有的如__N,會變形為_A__N

def__init__(self):

self.__X=10#變形為self._A__X

def__foo(self):#變形為_A__foo

print('fromA')

defbar(self):

self.__foo()#只有在類內部才可以通過__foo的形式訪問到.

這種自動變形的特點:

1、類中定義的__x只能在內部使用,如self.__x,引用的就是變形的結果。

2、這種變形其實正是針對外部的變形,在外部是無法通過__x這個名字訪問到的。

3、在子類定義的__x不會覆蓋在父類定義的__x,因為子類中變形成了:_子類名__x,而父類中變形成了:_父

類名__x,即雙下滑線開頭的屬性在繼承給子類時,子類是無法覆蓋的。

注意:對于這一層面的封裝(隱藏),我們需要在類中定義一個函數(接口函數)在它內部訪問被隱藏的屬性,然后

外部就可以使用了

這種變形需要注意的問題是:

1、這種機制也并沒有真正意義上限制我們從外部直接訪問屬性,知道了類名和屬性名就可以拼出名字:_類名__屬

性,然后就可以訪問了,如a._A__N

a=A()

print(a._A__N)

print(a._A__X)

print(A._A__N)

--------輸出結果--------

0

10

0

2、變形的過程只在類的定義是發生一次,在定義后的賦值操作,不會變形

a=A()#實例化對象a

print(a.__dict__)#打印變形的內容

a.__Y=20#新增Y的值,此時加__不會變形

print(a.__dict__)#打印變形的內容

---------輸出結果----------

{'_A__X':10}

{'_A__X':10,'__Y':20}#發現后面的Y并沒有變形

3、在繼承中,父類如果不想讓子類覆蓋自己的方法,可以將方法定義為私有的

classA:#這是正常情況

deffa(self):

print("fromA")

deftest(self):

self.fa()

classB(A):

deffa(self):

print("fromB")

b=B()

b.test()

--------輸出結果----------

fromB

看一下把fa被定義成私有的情況:

classA:#把fa定義成私有的,即__fa

def__fa(self):#在定義時就變形為_A__fa

print("fromA")

deftest(self):

self.__fa()#只會與自己所在的類為準,即調用_A__fa

classB(A):

def__fa(self):#b調用的是test,跟這個沒關系

print("fromB")

b=B()

b.test()

-------輸出結果---------

fromA

以上內容為大家介紹了Python基礎之封裝,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。

tags: python培訓
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 成品煮伊在2021一二三久| 欧美区日韩区| 最近2019免费中文字幕视频三| 精品福利视频一区二区三区| 羞羞漫画登录页面免费| 男男18gay| 麻豆一区区三三四区产品麻豆| 精品国产一区二区三区久久影院| 无翼乌漫画全彩| 美女的胸又黄又www网站免费| 免费看欧美一级特黄α大片| 青青草国产精品视频| 2018中文字幕第一页| 爱我久久国产精品| 国产乱子伦在线观看| 亚洲不卡1卡2卡三卡2021麻豆| 全彩熟睡侵犯h| 亚洲午夜一区二区电影院| 亚洲国产一成人久久精品| 久久久久久亚洲精品中文字幕 | 天天操天天爱天天干| 97精品伊人久久大香线蕉| 波多野结衣1048系列电影| 男人肌肌捅女人肌肌视频| 国产女人好紧好爽| 濑亚美莉在线视频一区| 宝贝过来趴好张开腿让我看看| 亚洲国产精品久久网午夜| 在线免费h| 色多多网站入口| 无遮挡h肉动漫网站| 免费一级毛片在线播放不收费| 一二三四视频社区在线| 波多野结衣新婚被邻居| 日本私人影院| 亚洲欧美日韩在线一区| 日本不卡在线观看免费v| 日本精品久久久久中文字幕| 女大学生沙龙室3| 国产视频综合| 交换年轻夫妇5|