今天小編給大家分享一下python私有屬性和方法怎么獲取的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
成都創(chuàng)新互聯(lián)公司專注于雨花網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供雨花營(yíng)銷型網(wǎng)站建設(shè),雨花網(wǎng)站制作、雨花網(wǎng)頁(yè)設(shè)計(jì)、雨花網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造雨花網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供雨花網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
一般來(lái)說(shuō),私有屬性和方法無(wú)法從外部直接獲得,也不能繼承
注:私有屬性和方法就是在前加上兩道下劃線
舉個(gè)栗子 -- 私有封裝前后對(duì)比
class A: # 原屬性 aa = 1 # 私有屬性 __bb = 2 # 初始化 def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 # 普通方法 def get_func(self): return self.num1 # 私有方法 def __get_num2(self): return self.num2 obj = A(10, 20) # 訪問(wèn)公有屬性 print(obj.aa) # 訪問(wèn)私有屬性 -- 結(jié)果報(bào)錯(cuò) print(obj.bb) # 訪問(wèn)公有方法 print(obj.get_public_num()) # 訪問(wèn)私有方法 -- 結(jié)果報(bào)錯(cuò) print(obj.__get_private_num())
輸出結(jié)果
>>>print(obj.aa) # 訪問(wèn)公有屬性 >>>1 >>>print(obj.bb) # 訪問(wèn)私有屬性 -- 結(jié)果報(bào)錯(cuò) >>> AttributeError: 'A' object has no attribute 'bb' >>># 訪問(wèn)公有方法 >>>10 >>>print(obj.__get_private_num()) # 訪問(wèn)私有方法 -- 結(jié)果報(bào)錯(cuò) >>>AttributeError: 'A' object has no attribute '__get_private_num'
可以看到二者的變化,私有屬性和方法無(wú)法通過(guò)原有方法從實(shí)例對(duì)象處獲得
但是你覺(jué)得這樣就真的安全了嗎?
答案是否定的,有一件事我們要明白: ==沒(méi)有絕對(duì)安全的語(yǔ)言==
為什么,讓我們換個(gè)訪問(wèn)方法訪問(wèn),來(lái)看下面這個(gè)例子:
>>> print(obj._A__get_private_num()) >>> 20
結(jié)果顯示,通過(guò)
實(shí)例對(duì)象._當(dāng)前類名__屬性/方法
的方法我們可以從外部實(shí)例對(duì)象處獲取到私有屬性和方法,值得一提的是,即使是繼承的子類也是可以的。
這反映出在語(yǔ)言層面來(lái)講沒(méi)有絕對(duì)的安全,只是python的突破方法比較簡(jiǎn)單而已。但一般設(shè)計(jì)者往往會(huì)在類中添加一些方法來(lái)查看和修改私有屬性與方法,按照規(guī)范,查看私有屬性的方法多命名為 get_xx( ), 修改私有屬性的方法多命名為 set__xx()
以上就是“python私有屬性和方法怎么獲取”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。