在python類中,有屬性和方法,外部代碼可以直接通過實(shí)例來訪問修改。
如果需要讓內(nèi)部的屬性不被外部訪問到,在屬性變量前面加上__2個(gè)下劃線。
在python中,實(shí)例的變量名如果是由__2個(gè)下花錢開頭的,就代表這是一個(gè)私有變量:只有內(nèi)部可以訪問,外部不許直接通過類或者實(shí)例訪問。
代碼:
雖然說外部訪問不了一個(gè)內(nèi)部私有屬性,但是可以通過類中方法間接的訪問、修改
類內(nèi)部方法getname和setname:
雙下劃線開頭的私有屬性,是不是一定不能從外部訪問呢?
其實(shí)不是的:
python中2個(gè)有趣的現(xiàn)象,外部變量遮蔽類中的變量。
從實(shí)例中訪問類屬性必須要謹(jǐn)慎。
和通常python變量一樣,任何對實(shí)例屬性的賦值都會創(chuàng)建一個(gè)實(shí)例屬性(如果實(shí)例屬性不存在的話),并且對其賦值。
但是,如果類屬性中存在同名的屬性,就是產(chǎn)生前面所說的有趣的副作用。
python3.x依舊存在這個(gè)情況。
下面上代碼:
為什么下面的dict類型的就會del報(bào)錯(cuò)呢??
原因在于:python是由c寫成的cpython。
c語言中,并沒有字符串這個(gè)概念:c中叫做字符數(shù)組,存儲在內(nèi)存中,是一塊連續(xù)的空間,不可修改,任何修改字符數(shù)組的行為,都會在不影響原始的字符數(shù)組下,創(chuàng)建產(chǎn)生一個(gè)新的字符數(shù)組。
而dict就不一樣了,它在內(nèi)存中存儲,是一系列非連續(xù)的內(nèi)存空間,可以在原來的基礎(chǔ)上修改,所以,第二個(gè)例子中del f.x就會報(bào)錯(cuò)。
-
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136708 -
python
+關(guān)注
關(guān)注
56文章
4793瀏覽量
84631
原文標(biāo)題:python的類訪問控制
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論