国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

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

            手機(jī)站
            千鋒教育

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

            千鋒教育

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

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

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

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

            Python基礎(chǔ)之封裝

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

            一、什么是封裝

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

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

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

            二、為什么要封裝

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

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

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

            通過(guò)按鈕就能實(shí)現(xiàn)對(duì)電視機(jī)的操作。)

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

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

            三、封裝分為兩個(gè)層面

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

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

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

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

            訪問(wèn)里面的名字,這本身就是一種封裝。

            print(m1.brand)#實(shí)例化對(duì)象(m1.)

            print(motor_vehicle.tag)#類(lèi)名(motor_vehicle.)

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

            春風(fēng)

            fueloil

            注意:對(duì)于這一層面的封裝(隱藏),類(lèi)名.和實(shí)例名.就是訪問(wèn)隱藏屬性的接口

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

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

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

            類(lèi)中所有雙下劃線開(kāi)頭的名稱如__x都會(huì)自動(dòng)變形成:_類(lèi)名__x的形式:

            classA:

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

            def__init__(self):

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

            def__foo(self):#變形為_(kāi)A__foo

            print('fromA')

            defbar(self):

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

            這種自動(dòng)變形的特點(diǎn):

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

            2、這種變形其實(shí)正是針對(duì)外部的變形,在外部是無(wú)法通過(guò)__x這個(gè)名字訪問(wèn)到的。

            3、在子類(lèi)定義的__x不會(huì)覆蓋在父類(lèi)定義的__x,因?yàn)樽宇?lèi)中變形成了:_子類(lèi)名__x,而父類(lèi)中變形成了:_父

            類(lèi)名__x,即雙下滑線開(kāi)頭的屬性在繼承給子類(lèi)時(shí),子類(lèi)是無(wú)法覆蓋的。

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

            外部就可以使用了

            這種變形需要注意的問(wèn)題是:

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

            性,然后就可以訪問(wèn)了,如a._A__N

            a=A()

            print(a._A__N)

            print(a._A__X)

            print(A._A__N)

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

            0

            10

            0

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

            a=A()#實(shí)例化對(duì)象a

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

            a.__Y=20#新增Y的值,此時(shí)加__不會(huì)變形

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

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

            {'_A__X':10}

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

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

            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):#在定義時(shí)就變形為_(kāi)A__fa

            print("fromA")

            deftest(self):

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

            classB(A):

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

            print("fromB")

            b=B()

            b.test()

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

            fromA

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

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(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ù)保存到文件中時(shí),文件是字節(jié)序列,因此必須將內(nèi)存數(shù)據(jù)轉(zhuǎn)換為字節(jié)序列,然后輸出到文件,這就是序列化;反之,從文件的...詳情>>

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

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

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

            可變參數(shù)允許你傳入0個(gè)或任意個(gè)參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時(shí)自動(dòng)組裝為一個(gè)tuple。而關(guān)鍵字參數(shù)允許你傳入0個(gè)或任意個(gè)含參數(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)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到...詳情>>

            2023-11-08 02:56:48
            快速通道