1. 程式人生 > >Python2.7 學習體會 @classmethod @staticmethod @property 之間的關系二

Python2.7 學習體會 @classmethod @staticmethod @property 之間的關系二

普通 ear self static bject 代碼片段 split 本質 valid


先到百度找了一下資料,引用個重點,對比昨天實例來理解:

引用:http://blog.csdn.net/carolzhang8406/article/details/6856817

在Python中,靜態方法和類方法都是可以通過類對象和類對象實例訪問。但是區別是:

  • @classmethod 是一個函數修飾符,它表示接下來的是一個類方法,而對於平常我們見到的則叫做實例方法。 類方法的第一個參數cls,而實例方法的第一個參數是self,表示該類的一個實例。
  • 普通對象方法至少需要一個self參數,代表類對象實例
  • 類方法有類變量cls傳入,從而可以用cls做一些相關的處理。並且有子類繼承時,調用該類方法時,傳入的類變量cls是子類,而非父類
    。 對於類方法,可以通過類來調用,就像C.f(),有點類似C++中的靜態方法, 也可以通過類的一個實例來調用,就像C().f(),這裏C(),寫成這樣之後它就是類的一個實例了。
  • 靜態方法則沒有,它基本上跟一個全局函數相同,一般來說用的很少



引用:http://www.cnblogs.com/agnewee/p/5653936.html

@classmethod 優勢特點:

  • 在一個地方解析日期字符串並且重復使用它。
  • 做到很好的封裝(相對於把執行字符串解析作為一個單獨的函數在任何地方執行,這裏使用的方法更符合OOP的範式)
  • cls表示類對象,而不是類實例。這樣很酷,因為如果我們繼承Date類,那麽所有的子類也都將擁有from_string
    這個方法
  • 類方法通過隱性參數綁定在類上,函數內可通過隱性參數進行實例生成
  • calssmethod 方法,可以通過類和實例直接調用

---------------------------------------------------------------------------------------------------

@staticmethod 特點:

那麽staticmethod又是什麽呢?它和classmethod非常的相似,但是不強制要求傳遞參數(但是做的事與類方法或實例方法一樣)。

讓我們來看一個使用的例子。

我們有一個日期字符串需要以某種方式驗證。這個任務與之前一樣要定義在Date類內部,但是不要求實例化它。

靜態方法在這種情況下就非常有用。看一下下面這個代碼片段:

    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string_split(‘-‘))
        return day <= 31 and month <= 12 and year <= 3999
    
    is_date = Date.is_date_valid(‘11-09-2012‘)

現在正如我們了解到的staticmethod的使用,我們不需要訪問它所屬的類,它本質上就是一個函數,調用方式和調用函數一樣.靜態方法無綁定,和普通函數使用方法一樣,只是需要通過類或者實例來調用沒有隱性參數。

---------------------------------------------------------------------------------------------------------

@porperty 特點:

只讀方法,實例調用不能輸入參數。

引用:http://blog.csdn.net/my2010sam/article/details/8585336

@property 就是給函數設置只讀屬性
這裏定義的屬性是一個只讀屬性,如果需要可寫,則需要再定義一個setter:
class Rabbit(object):
def __init__(self,name):
self._name = name
@classmethod
def newClass(cls):
return ‘abc‘,cls,Rabbit(‘‘)
@property
def name(self):
return self._name
@name.setter
def name(self,newname):
self._name= newname

-----------------------------------------------------------------------------------------

實例方法通過隱性參數綁定在類上,函數內通過隱性參數訪問實例屬性。

Python2.7 學習體會 @classmethod @staticmethod @property 之間的關系二