默認情況下,Python中的成員函數和成員變量都是公開的(public),在python中沒有類public,private等關鍵詞來修飾成員函數和成員變量。其實,Python並沒有真正的私有化支持,但可用下划線得到偽私有。 盡量避免定義以下划線開頭的變量!
(1)_xxx "單下划線 " 開始的成員變量叫做保護變量,意思是只有類實例和子類實例能訪問到這些變量,需通過類提供的接口進行訪問;不能用'from module import *'導入
(2)__xxx 類中的私有變量/方法名 (Python的函數也是對象,所以成員方法稱為成員變量也行得通。)," 雙下划線 " 開始的是私有成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數據。
(3)__xxx__ 系統定義名字,前后均有一個“雙下划線” 代表python里特殊方法專用的標識,如 __init__()代表類的構造函數。
#-*- coding:utf-8 -*- class A(object): def __init__(self):#系統定義方法 self.string='A string' self._string='A _string' self.__string='A __string'#私有變量 def fun(self): return self.string + ' fun-A' def _fun(self): return self._string+' _fun-A' def __fun(self):#私有方法 return self.__string+' __fun-A' def for__fun(self):#內部調用私有方法 return self.__fun() class B(A): def __init__(self):#系統定義方法 self.string = 'B string' a=A() print a.string print a._string # print a.__string 不可訪問 print a.fun() print a._fun() #print a.__fun() 不可訪問 print a.for__fun() b=B() print b.fun() print b.fun().__len__()#系統定義函數
輸出:
A string
A _string
A string fun-A
A _string _fun-A
A __string __fun-A
B string fun-A
14