python私有變數

2021-09-20 13:47:09 字數 1560 閱讀 1187

在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 以單下劃線...