18.python類的保護和私有化
阿新 • • 發佈:2018-12-19
結論:
"_“和” _ _"的使用 更多的是一種規範/約定,並沒有真正達到限制的目的:
“_”:以單下劃線開頭的表示的是protected型別的變數,即只能允許其本身與子類物件直接進行訪問; “__”:雙下劃線的表示的是私有型別的變數。只能是允許這個類本身進行訪問了,連子類也不可以,這類屬性在執行時屬性名會加上單下劃線和類名。
當使用"from moduleNmae import *"時,不會將以一個下劃線開頭的物件和兩個下劃線開通的物件引入
# coding=utf-8 __author__ = 'Wang' class Baseclass(object): a = "aa" _b = "bb" __c = "cc" def __init__(self, d, e, f): self.d = d self._e =e self.__f =f def _show1(self):#######1.所有的變數使用類的方法都可以訪問 print self.a print self._b print self.__c print self.d print self._e print self.__f def __show2(self): print self.a print self._b print self.__c print self.d print self._e print self.__f class Subclass(Baseclass): def __init__(self, d, e, f): super(Subclass, self).__init__(d, e, f) self.a="gg" def _get(self):#######2.子類的方法也可以直接訪問 print self.a print self._b print self.__c print self.d print self._e print self.__f
if __name__ == "__main__": print "******1111***********" object = Baseclass("dd", "ee", "ff") print object.a print object._b print object.d ##########例項可以訪問類屬性 print object._e ##########例項可以訪問類屬性 # print object.__c ###例項不能直接訪問帶__的類屬性 # print object.__f ###例項不能直接訪問帶__的變數 print (object._Baseclass__c)#####例項+下劃線+類名+變數名訪問 print (object._Baseclass__f)####例項+下劃線+類名+變數名訪問 print "******2222***********" print Baseclass.a print Baseclass._b # print Baseclass.d ##########類不能訪問例項屬性 # print Baseclass._e ##########類不能訪問例項屬性 print (Baseclass._Baseclass__c)##類名+下劃線+類名+變數名訪問 # print (Baseclass._Baseclass__f) #####類不能訪問例項屬性 print "******3333***********" object._show1() print "######4444###########" object._Baseclass__show2() print "######5555###########" object2 = Subclass("dd", "ee", "ff") print object2.a print object2._b print object2.d ##########例項可以訪問類屬性 print object2._e ##########例項可以訪問類屬性 print (object2._Baseclass__c)###子類例項+下劃線+類名+變數名訪問 print (object2._Baseclass__f)###子類例項+下劃線+類名+變數名訪問 print "******6666***********" print Subclass.a print Subclass._b # print Baseclass.d ##########類不能訪問例項屬性 # print Baseclass._e ##########類不能訪問例項屬性 print "######77777###########"