久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時隨地免費學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > Python基礎(chǔ)之封裝

        Python基礎(chǔ)之封裝

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

        一、什么是封裝

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

        含義是其他程序無法調(diào)用。

        要了解封裝,離不開“私有化”,就是將類或者是函數(shù)中的某些屬性限制在某個區(qū)域之內(nèi),外部無法調(diào)用。

        二、為什么要封裝

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

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

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

        通過按鈕就能實現(xiàn)對電視機(jī)的操作。)

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

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

        三、封裝分為兩個層面

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

        口,有了這個入口,使用者無需且不能夠直接訪問到內(nèi)部隱藏的細(xì)節(jié),只能走接口,并且我們可以在接口的實現(xiàn)上附加更

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

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

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

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

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

        -------------輸出結(jié)果--------------

        春風(fēng)

        fueloil

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

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

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

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

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

        classA:

        __N=0#類的數(shù)據(jù)屬性就應(yīng)該是共享的,但是語法上是可以把類的數(shù)據(jù)屬性設(shè)置成私有的如__N,會變形為_A__N

        def__init__(self):

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

        def__foo(self):#變形為_A__foo

        print('fromA')

        defbar(self):

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

        這種自動變形的特點:

        1、類中定義的__x只能在內(nèi)部使用,如self.__x,引用的就是變形的結(jié)果。

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

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

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

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

        外部就可以使用了

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

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

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

        a=A()

        print(a._A__N)

        print(a._A__X)

        print(A._A__N)

        --------輸出結(jié)果--------

        0

        10

        0

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

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

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

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

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

        ---------輸出結(jié)果----------

        {'_A__X':10}

        {'_A__X':10,'__Y':20}#發(fā)現(xiàn)后面的Y并沒有變形

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

        classA:#這是正常情況

        deffa(self):

        print("fromA")

        deftest(self):

        self.fa()

        classB(A):

        deffa(self):

        print("fromB")

        b=B()

        b.test()

        --------輸出結(jié)果----------

        fromB

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

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

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

        print("fromA")

        deftest(self):

        self.__fa()#只會與自己所在的類為準(zhǔn),即調(diào)用_A__fa

        classB(A):

        def__fa(self):#b調(diào)用的是test,跟這個沒關(guān)系

        print("fromB")

        b=B()

        b.test()

        -------輸出結(jié)果---------

        fromA

        以上內(nèi)容為大家介紹了Python基礎(chǔ)之封裝,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
        免費領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        python 序列化與反序列化如何使用?

        根據(jù)某些規(guī)則,將內(nèi)存數(shù)據(jù)保存到文件中時,文件是字節(jié)序列,因此必須將內(nèi)存數(shù)據(jù)轉(zhuǎn)換為字節(jié)序列,然后輸出到文件,這就是序列化;反之,從文件的...詳情>>

        2023-11-08 07:01:37
        Python企業(yè)應(yīng)用的優(yōu)缺點

        Python是軟件開發(fā)領(lǐng)域一朵誘人的奇葩:人們經(jīng)常把Python看作是一種起到縫合作用的嚴(yán)格腳本語言,不過卻很少有人意識到Python已經(jīng)足夠強(qiáng)大到應(yīng)用...詳情>>

        2023-11-08 06:25:37
        python 關(guān)鍵字參數(shù)

        可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple。而關(guān)鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些...詳情>>

        2023-11-08 04:59:13
        python 列表元素的刪除

        使用del命令刪除列表中的指定位置上的元素。>>>a_list=[3,5,7,9,11]>>>dela_list[1]>>>a_list[3,7,9,11]使用列表的pop()方法刪除并返回指定位置...詳情>>

        2023-11-08 03:58:01
        python 插入排序

        原理插入排序(InsertionSort)是一種簡單直觀的排序算法。它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到...詳情>>

        2023-11-08 02:56:48
        邵武市| 略阳县| 定陶县| 宣城市| 伊宁市| 潮安县| 松江区| 芦山县| 金塔县| 宁都县| 巴里| 阿瓦提县| 海原县| 虹口区| 遂宁市| 白城市| 南宁市| 岗巴县| 临泽县| 丹巴县| 长沙县| 南城县| 尚义县| 贵溪市| 恩平市| 繁昌县| 兰西县| 竹山县| 喀喇沁旗| 乐安县| 岢岚县| 雷州市| 武平县| 武邑县| 庆阳市| 平乡县| 上饶市| 凌海市| 贵阳市| 凤冈县| 合水县|