*面向?qū)ο蟮奶卣鳌庋b的意義和操作過(guò)程

封裝是對(duì)全局作用域中其它區(qū)域隱藏多余信息的原則。

封裝聽(tīng)起來(lái)有些像多態(tài),因?yàn)樗麄兌际?抽象的原則---他們都會(huì)幫助處理程序組件而不用過(guò)多關(guān)心多余細(xì)節(jié),就像函數(shù)做的一樣。但是封裝并不等同于多態(tài)。多態(tài)的可以讓用戶(hù)對(duì)于不知道是什么類(lèi)(或?qū)ο箢?lèi)型)的對(duì)象進(jìn)行方法調(diào)用,而封裝是可以不用關(guān)心對(duì)象是如何構(gòu)建的而直接進(jìn)行使用。

創(chuàng)建一個(gè)有對(duì)象(通過(guò)像調(diào)用函數(shù)一樣調(diào)用類(lèi))后,將變量c綁定到該對(duì)象上。可以使用set和 get 方法如:

>>>class Person:

>>> ? ? ?def __init__(self,name): ? -->初始化函數(shù),對(duì)對(duì)象的屬性初始化

>>> ? ? ? ? ? ? ? ? self.__name=name-->通過(guò)傳參數(shù),為私有變量__name復(fù)賦值

>>> ? ? ?def get_name(self):-->定義公有g(shù)et函數(shù),用以類(lèi)外獲取對(duì)象私有屬性的值

>>> ? ? ? ? ? ? ? ? return self.__name

>>> ? ? ?def set_name(self,n):-->定義公有set函數(shù),用以類(lèi)外修改私有屬性的值

>>> ? ? ? ? ? ? ? ? self.__name=n

>>>person=Person("tom")

>>>print(person.get_name())

>>>person.set_name("tony')

>>>print(person.get_name())

這個(gè)程序就實(shí)現(xiàn)了封裝,將__name屬性定義為私有屬性,外界不可對(duì)其直接訪問(wèn),只能通過(guò)類(lèi)內(nèi)定義的set和get函數(shù)實(shí)現(xiàn)對(duì)屬性的修改和提取,最終輸出的結(jié)果是("tom")("tony")y

@property,@(method).setter這兩個(gè)注解更加嚴(yán)密的隱藏了類(lèi)的方法,把set和get函數(shù)注解為對(duì)象,然后用對(duì)象的操作方法操作這兩個(gè)函數(shù)如:

>>> ? ? ?@property

>>>? ? ? def get_name(self):-->定義公有g(shù)et函數(shù),用以類(lèi)外獲取對(duì)象私有屬性的值

>>> ? ? ? ? ? ? ? ? return self.__name

>>> ? ? ?@get_name.setter

>>> ? ? ?def set_name(self,n):-->定義公有set函數(shù),用以類(lèi)外修改私有屬性的值

>>> ? ? ? ? ? ? ? ? self.__name=n

函數(shù)的重載使面向?qū)ο蟮姆庋b達(dá)到了一個(gè)新的高度,搭配@property和@(method).setter使函數(shù)的工作方法徹底隱藏,函數(shù)的重載又稱(chēng)為偽方法重載,偽方法重載:python中,默認(rèn)不提供方法重載,但是在高級(jí)封裝的過(guò)程中,又出現(xiàn)了類(lèi)似方法重載的代碼語(yǔ)法,所以~稱(chēng)之為偽方法重載,語(yǔ)法如下:

>>>? ? ? @property

>>>? ? ? def name(self):

>>> ? ? ? ? ? ? ? ? return self.__name

>>> ? ? ?@get_name.setter

>>> ? ? ?def name(self,n):

>>> ? ? ? ? ? ? ? ? self.__name=n

這里有兩個(gè)函數(shù)名為name的函數(shù),雖然有不同的函數(shù)作用,但是函數(shù)名相同,參數(shù)不同,這種方式成為偽方法重載,在類(lèi)外調(diào)用時(shí),跟對(duì)象的使用方式一樣,所以可以很好的隱藏工作方法

將對(duì)象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)合,通過(guò)方法將對(duì)象的數(shù)據(jù)與實(shí)現(xiàn)細(xì)節(jié)保護(hù)起來(lái),就稱(chēng)為封裝。外界只能通過(guò)對(duì)象的方法訪問(wèn)對(duì)象,因此封裝同時(shí)也實(shí)現(xiàn)了對(duì)象的數(shù)據(jù)隱藏。

在使用面向?qū)ο蟮姆庋b特性時(shí),需要:將內(nèi)容封裝到某處,和從某處調(diào)用被封裝的內(nèi)容

總體來(lái)說(shuō),封裝的意義就是實(shí)現(xiàn)了對(duì)象的數(shù)據(jù)隱藏

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容