Python:類屬性,實例屬性,私有屬性與靜態方法,類方法,實例方法


From: http://www.cnblogs.com/pengsixiong/p/4823473.html

屬性分為實例屬性與類屬性

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

 

一:屬性:

  盡量把需要用戶傳入的屬性作為實例屬性,而把同類都一樣的屬性作為類屬性。實例屬性在每創造一個類是都會初始化一遍,不同的實例的實例屬性可能不同,不同實例的類屬性都相同。從而減少內存。

  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.  
  6.     @classmethod  
  7.     def Print1(cls):  
  8.         print "print 1: ", cls.member  
  9.           
  10.     def Print2(self):  
  11.         print "print 2: ", self.member  
  12.             
  13.          
  14.     @classmethod      
  15.     def Print3(paraTest):  
  16.         print "print 3: ", paraTest.member  
  17.     @staticmethod  
  18.     def print4():  
  19.         print "hello"  

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM