您好,登錄后才能下訂單哦!
這篇文章主要介紹python實(shí)現(xiàn)封裝的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
Python 并沒(méi)有提供類(lèi)似于其他語(yǔ)言的 private 等修飾符,因此 Python 并不能真正支持隱藏。為了隱藏類(lèi)中的成員,Python 玩了一個(gè)小
技巧:只要將 Python 類(lèi)的成員命名為以雙下畫(huà)線開(kāi)頭的,Python 就會(huì)把它們隱藏起來(lái)。
推薦:Python教程
例如,如下程序示范了 Python 的封裝機(jī)制:
class User : def __hide(self): print('示范隱藏的hide方法') def getname(self): return self.__name def setname(self, name): if len(name) < 3 or len(name) > 8: raise ValueError('用戶名長(zhǎng)度必須在3~8之間') self.__name = name name = property(getname, setname) def setage(self, age): if age < 18 or age > 70: raise ValueError('用戶名年齡必須在18在70之間') self.__age = age def getage(self): return self.__age age = property(getage, setage) # 創(chuàng)建User對(duì)象 u = User() # 對(duì)name屬性賦值,實(shí)際上調(diào)用setname()方法 u.name = 'fk' # 引發(fā) ValueError: 用戶名長(zhǎng)度必須在3~8之間
上面程序?qū)?User 的兩個(gè)實(shí)例變量分別命名為 __name 和 __age,這兩個(gè)實(shí)例變量就會(huì)被隱藏起來(lái),這樣程序就無(wú)法直接訪問(wèn) __name、__age 變量,只能通過(guò) setname()、getname()、setage()、getage() 這些訪問(wèn)器方法進(jìn)行訪問(wèn),而 setname()、setage() 會(huì)對(duì)用戶設(shè)置的 name、age 進(jìn)行控制,只有符合條件的 name、age 才允許設(shè)置。
上面程序嘗試將 User 對(duì)象的 name 設(shè)為 fk,這個(gè)字符串的長(zhǎng)度為“2”不符合實(shí)際要求,因此運(yùn)行程序最后一行包含如下錯(cuò)誤:
ValueError:用戶名長(zhǎng)度必須在3-8之間
將最后一行代碼注釋掉,并在程序尾部添加如下代碼:
u.name = 'fkit' u.age = 25 print(u.name) # fkit print(u.age) # 25
此時(shí)程序?qū)?name、age 所賦的值都符合要求,因此上面兩行賦值語(yǔ)句完全可以正常運(yùn)行。運(yùn)行上面代碼,可以看到如下輸出結(jié)果:
fkit 25
從該程序可以看出封裝的好處,程序可以將 User 對(duì)象的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái),程序只能通過(guò)暴露出來(lái)的 setname()、setage() 方法來(lái)改變 User 對(duì)象的狀態(tài),而這兩個(gè)方法可以添加自己的邏輯控制,這種控制對(duì) User 的修改始終是安全的。上面程序還定義了一個(gè) __hide() 方法,這個(gè)方法默認(rèn)是隱藏的。如果程序嘗試執(zhí)行如下代碼:
# 嘗試調(diào)用隱藏的__hide()方法 u.__hide()
將會(huì)提示如下錯(cuò)誤:
AttributeError:'User' object has no attribute 'hide'
最后需要說(shuō)明的是,Python 其實(shí)沒(méi)有真正的隱藏機(jī)制,雙下畫(huà)線只是 Python 的一個(gè)小技巧,Python 會(huì)“偷偷”地改變以雙下畫(huà)線開(kāi)頭的方法名,會(huì)在這些方法名前添加單下畫(huà)線和類(lèi)名。因此上面的 __hide() 方法其實(shí)可以按如下方式調(diào)用(通常并不推薦這么干):
# 調(diào)用隱藏的__hide()方法 u._User__hide()
運(yùn)行上面代碼,可以看到如下輸出結(jié)果:
示范隱藏的hide方法
通過(guò)上面調(diào)用可以看出,Python 并沒(méi)有實(shí)現(xiàn)真正的隱藏。
類(lèi)似的是,程序也可通過(guò)為隱藏的實(shí)例變量添加下畫(huà)線和類(lèi)名的方式來(lái)訪問(wèn)或修改對(duì)象的實(shí)例變量。例如如下代碼:
# 對(duì)隱藏的__name屬性賦值 u._User__name = 'fk' # 訪問(wèn)User對(duì)象的name屬性(實(shí)際上訪問(wèn)__name實(shí)例變量) print(u.name)
以上是python實(shí)現(xiàn)封裝的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。