很多內容和java很類似,但是使用時還是有很多的細節區分
#coding=utf-8#oop/oop1.py '''1 所有的類中的方法的參數表中都需要一個self參數2 方法中要使用類的成員變數必須使用self關鍵字 3 成員變數命名時加上'__xx'的首碼說明為私人屬性,不能夠通過類對象直接存取 如 p.__money 其實也可以訪問 如:p._Person__money ,一般都是測試使用4 方法分類: 私人方法:不能被外部的類和方法調用,命名也是有'__'首碼 類方法:被classmethod() 處理過得方法,能被類調用也能被對象調用 2中方法定義 靜態方法: 通過staticmethod()方法處理,參數表中沒有self參數,相當於全域函數 2種方法定義 靜態方法和動態方法的區別: 靜態方法在未執行時已經載入到記憶體中,動態方法是調用時才載入到記憶體中, 所以靜態方法快,佔用記憶體多,動態方法慢,但是佔用記憶體少。'''class Person(object): name='lzz' __money=20 __age=30 def printsome(self): print self.name print self.__money #內部方法調用私人方法 self.__selfSay() #私人方法 def __selfSay(self): print 'Hihi' #擷取私人屬性的方法,類似javabean def get(self,x): return self.x #這樣顯然是由問題的,x到底是什麼類型呢,加判斷也沒怎麼簡潔。。 #類方法的實現 def runing(self): print 'running' runing = classmethod(runing) #靜態方法的實現 def jumping(): #嚴格規定沒有self函數 print 'jumping' jumping = staticmethod(jumping) #使用裝飾器實作類別方法和靜態方法,類似java中的註解 @classmethod def hihi(self): pass @staticmethod def haha(): pass if __name__=='__main__': #讓一個類可以變得可執行 p=Person() # p.printsome() # p.__money # print p.__dict__ # print p._Person__money #p.__selfSay() #IndentationError: unindent does not match any outer indentation level # p.get('__age') #Person.runing() #Person.jumping()
筆記代碼