1. 程式人生 > >Python:類屬性,例項屬性,私有屬性與靜態方法,類方法,例項方法 屬性分為例項屬性與類屬性 方法分為普通方法,類方法,靜態方法 一:屬性:   儘量把需要使用者傳入的屬性作為例項屬性,而

Python:類屬性,例項屬性,私有屬性與靜態方法,類方法,例項方法 屬性分為例項屬性與類屬性 方法分為普通方法,類方法,靜態方法 一:屬性:   儘量把需要使用者傳入的屬性作為例項屬性,而

屬性分為例項屬性與類屬性

方法分為普通方法,類方法,靜態方法

一:屬性:

  儘量把需要使用者傳入的屬性作為例項屬性,而把同類都一樣的屬性作為類屬性。例項屬性在每創造一個例項時都會初始化一遍,不同的例項的例項屬性可能不同,不同例項的類屬性都相同。從而減少記憶體。

  1:例項屬性:

    最好在__init__(self,...)中初始化

    內部呼叫時都需要加上self.

    外部呼叫時用instancename.propertyname

  2:類屬性:

    在__init__()外初始化

    在內部用classname.類屬性名呼叫

    外部既可以用classname.類屬性名又可以用instancename.類屬性名來呼叫

  3:私有屬性:

    1):單下劃線_開頭:只是告訴別人這是私有屬性,外部依然可以訪問更改

    2):雙下劃線__開頭:外部不可通過instancename.propertyname來訪問或者更改

      實際將其轉化為了_classname__propertyname

二:方法

  1:普通類方法:

    def fun_name(self,...):

      pass

    外部用例項呼叫

  2:靜態方法:@staticmethod            

      不能訪問例項屬性!!!   引數不能傳入self!!!

      與類相關但是不依賴類與例項的方法!!

  3:類方法:@classmethod

      不能訪問例項屬性!!!   引數必須傳入cls!!!

      必須傳入cls引數(即代表了此類物件-----區別------self代表例項物件),並且用此來呼叫類屬性:cls.類屬性名

  *靜態方法與類方法都可以通過類或者例項來呼叫。其兩個的特點都是不能夠呼叫例項屬性

  e.g1:

  1. class A:  
  2.     member = "this is a test."  
  3.     def __init__(self):  
  4.         pass  
  5.     @classmethod  
  6.     def Print1(cls):  
  7.         print "print 1: ", cls.member  
  8.     def Print2(self):  
  9.         print "print 2: ", self.member  
  10.     @classmethod      
  11.     def Print3(paraTest):  
  12.         print "print 3: ", paraTest.member  
  13.     @staticmethod  
  14.     def print4():  
  15.         print "hello"  

總結:類屬性與類方法是類固有的方法與屬性,不會因為例項不同而改變,寫他們的目的是減少多例項時所創造出來的記憶體空間,加快執行速度。