在python中定義私有變數只需要在變數名或函式名前加上 」__「兩個下劃線,那麼這個函式或變數就是私有的了。
在內部,python使用一種 name mangling 技術,將 __membername替換成 _classname__membername,也就是說,類的內部定義中,
所有以雙下劃線開始的名字都被"翻譯"成前面加上單下劃線和類名的形式。
例如:為了保證不能在class之外訪問私有變數,python會在類的內部自動的把我們定義的__spam私有變數的名字替換成為
_classname__spam(注意,classname前面是乙個下劃線,spam前是兩個下劃線),因此,使用者在外部訪問__spam的時候就會
提示找不到相應的變數。 python中的私有變數和私有方法仍然是可以訪問的;訪問方法如下:
私有變數:例項._類名__變數名
私有方法:例項._類名__方法名()
其實,python並沒有真正的私有化支援,但可用下劃線得到偽私有。 盡量避免定義以下劃線開頭的變數!
(1)_*** "單下劃線 " 開始的成員變數叫做保護變數,意思是只有類例項和子類例項能訪問到這些變數,
需通過類提供的介面進行訪問;不能用』from module import *'匯入。這樣的例項變數外部是可以訪問的,但是,按照約定俗成的規定,當你看到這樣的變數時,意思是,「雖然我可以被訪問,但是,請把我視為私有變數,不要隨意訪問。」
(2)__*** 類中的私有變數/方法名 (python的函式也是物件,所以成員方法稱為成員變數也行得通。),
" 雙下劃線 " 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。外部可以通過get和set方法獲取和設定私有變數。
(3)***系統定義名字,前後均有乙個「雙下劃線」 代表python裡特殊方法專用的標識,如init()代表類的建構函式。
class a(object):
def __init__(self,name):
self.__data= #翻譯成 self._a__data=
self.__name = name
def add(self,item):
def printdata(self):
print self.__data #翻譯成 self._a__data
def get_name(self):
return self.__name
def set_name(self,name):
self.__name = name
a=a('hjw')
a.add('hello')
a.add('python')
a.printdata()
#print a.__data #外界不能訪問私有變數 attributeerror: 'a' object has no attribute '__data'
print a._a__data #通過這種方式,在外面也能夠訪問「私有」變數;這一點在除錯中是比較有用的!
python私有變數
只有在函式裡 不一定是建構函式 以 開頭的變數才是私有變數,看 class a definit self self.data1 1 self.data2 2 self.data3 3 self.data4 44 def fun1 self print self.data4 self.data5 5 ...
python私有變數公開變數說明
先上 class people name l 女 def init self,age self.age age def str self return 姓名 self.name 年齡 str self.age 性別 self.先說公開變數,name和age都是公開變數,外部都可以通過 例項物件.na...
python類的私有變數和私有方法
usr bin env python coding utf 8 time 2017 11 08 8 46 author lijunjiang file class3.py 類的私有變數和私有方法 在python中可以通過在屬性變數名前加上雙下劃線定義屬性為私有屬性 特殊變數命名 1 xx 以單下劃線...