Python 私有屬性和私有方法應(yīng)用場(chǎng)景分析
類的私有屬性和方法
Python是個(gè)開(kāi)放的語(yǔ)言,默認(rèn)情況下所有的屬性和方法都是公開(kāi)的 或者叫公有方法,不像C++和 Java中有明確的public,private 關(guān)鍵字來(lái)區(qū)分私有公有。
Python默認(rèn)的成員函數(shù)和成員變量都是公開(kāi)的,類的私有屬性指只有在類的內(nèi)部使用的屬性或方法,表現(xiàn)形式為以“__“ 屬性名或方法名以雙下劃線開(kāi)頭。
class Test(object): __count = 0 # 私有屬性 __count def get_count(self): return self.__count # 類的內(nèi)部可以使用私有屬性 def set_count(self, value): if self.__check_value(value): # 在類的內(nèi)部調(diào)用類的私有方法 self.__class__.__count = value def __check_value(self, value): # 定義類的私有方法 檢查參數(shù) if isinstance(value, int): return Truea = Test()print(a.get_count())a.set_count(100)print(a.get_count())#a.__check_value(10) # 調(diào)用私有方法會(huì)報(bào)錯(cuò)#print(a.__count)# 直接訪問(wèn)私有屬性也會(huì)報(bào)錯(cuò)
應(yīng)用場(chǎng)景
對(duì)于一些敏感的數(shù)據(jù),我們不希望直接被的函數(shù)調(diào)用,或者不希望草率的直接 object.key = value 來(lái)修改,我們可以選擇將屬性聲名為私有的,這樣從外部時(shí)無(wú)法訪問(wèn)該屬性的,也就不能修改了,但是依然可以修改屬性字典的方法來(lái)修改。
# 當(dāng)然 可以使用 @proprety class Person(object): __name = ’Monkey’ def update_name(self, name): self.__name = name def get_name(self): return self.__namep = Person()p.update_name(’BlackMonkey’)print(p.get_name()) # BlackMonkeyprint(p.__name) # 報(bào)錯(cuò) AttributeError: ’Person’ object has no attribute ’__name’
下面在看下python中私有屬性和受保護(hù)的屬性的實(shí)例代碼
具體代碼如下所示:
class People: def __init__(self, name, age): self.name = name self.age = age self._protect_var = 10 # 受保護(hù)的成員,使用一個(gè)下劃線_,它僅僅是提示成員受保護(hù),但可以被更改 self.__private_var = 10 # 使用雙下劃線__可以定義私有屬性 def sayhi(self): print('Hi, my name is {}, and I’m {}'.format(self.name, self.age)) def get_var(self): print(self.__private_var) def set_var(self, var): self.__private_var = var # class instance 類的實(shí)例化 someone = People(name=’Jack’, age=20) # 類的實(shí)例化print(someone._protect_var) # 10 受保護(hù)的成員可以被打印someone._protect_var = 20 # 受保護(hù)的成員可以被修改print(someone._protect_var) # 20 可以被修改 # print(someone.__private_var) # 報(bào)錯(cuò) AttributeError: ’People’ object has no attribute ’__private_var’someone.__private_var = 30 # 此處可以被修改,不會(huì)報(bào)錯(cuò)(此處表示私有屬性可以被修改,具體原因可以百度)print(someone.__private_var) # 可以打印,不會(huì)報(bào)錯(cuò) someone.get_var() # 10 此處可以發(fā)現(xiàn),__private_var在上面被改成30,但此處打印出來(lái)卻是10(具體原因可以百度)someone.set_var(40)someone.get_var() # 40 這里通過(guò)someone.set_var(40)改成了40 print(dir(someone)) # dir()打印出someone這個(gè)對(duì)象支持的屬性和方法# [’_People__private_var’, ’__class__’, ’__delattr__’, ’__dict__’, ’__dir__’, ’__doc__’, ’__eq__’, ’__format__’, ’__ge__’, ’__getattribute__’, ’__gt__’, ’__hash__’, ’__init__’, ’__init_subclass__’, ’__le__’, ’__lt__’, ’__module__’, ’__ne__’, ’__new__’, ’__private_var’, ’__reduce__’, ’__reduce_ex__’, ’__repr__’, ’__setattr__’, ’__sizeof__’, ’__str__’, ’__subclasshook__’, ’__weakref__’, ’_protect_var’, ’age’, ’get_var’, ’name’, ’sayhi’, ’set_var’]# 在類的內(nèi)部重命名了 __private_var重命名成_People__private_var someone._People__private_var = 100someone.get_var() # 100 通過(guò)_People__private_var把__private_var的值改成了100
總結(jié)
到此這篇關(guān)于Python 私有屬性和私有方法應(yīng)用場(chǎng)景分析的文章就介紹到這了,更多相關(guān)python 私有屬性和私有方法內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法2. idea自定義快捷鍵的方法步驟3. IntelliJ IDEA設(shè)置背景圖片的方法步驟4. IntelliJ IDEA配置Tomcat服務(wù)器的方法5. python中復(fù)數(shù)的共軛復(fù)數(shù)知識(shí)點(diǎn)總結(jié)6. PHP腳本的10個(gè)技巧(8)7. IntelliJ IDEA導(dǎo)出項(xiàng)目的方法8. IntelliJ IDEA調(diào)整字體大小的方法9. jsp網(wǎng)頁(yè)實(shí)現(xiàn)貪吃蛇小游戲10. idea修改背景顏色樣式的方法
