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