默認(rèn)情況下,Python中的成員函數(shù)和成員變量都是公開的(public),在python中沒有類public,private等關(guān)鍵詞來修飾成員函數(shù)和成員變量。其實(shí),Python并沒有真正的私有化支持,但可用下劃線得到偽私有。 盡量避免定義以下劃線開頭的變量!
?。?)_xxx "單下劃線 " 開始的成員變量叫做保護(hù)變量,意思是只有類實(shí)例和子類實(shí)例能訪問到這些變量,需通過類提供的接口進(jìn)行訪問;不能用'from module import *'導(dǎo)入
?。?)__xxx 類中的私有變量/方法名 (Python的函數(shù)也是對(duì)象,所以成員方法稱為成員變量也行得通。)," 雙下劃線 " 開始的是私有成員,意思是只有類對(duì)象自己能訪問,連子類對(duì)象也不能訪問到這個(gè)數(shù)據(jù)。
?。?)__xxx__ 系統(tǒng)定義名字,前后均有一個(gè)“雙下劃線” 代表python里特殊方法專用的標(biāo)識(shí),如 __init__()代表類的構(gòu)造函數(shù)。
#-*- coding:utf-8 -*-
class A(object):
def __init__(self):#系統(tǒng)定義方法
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):#內(nèi)部調(diào)用私有方法
return self.__fun()
class B(A):
def __init__(self):#系統(tǒng)定義方法
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__()#系統(tǒng)定義函數(shù)
輸出:
A string
A _string
A string fun-A
A _string _fun-A
A __string __fun-A
B string fun-A
14
轉(zhuǎn)自: