python中的靜態方法和類方法

來源:互聯網
上載者:User

    唉~今天為了python中靜態方法和類方法差了一下午啊,最後在官方文檔中糾結了半天,最後終於知道了這兩種函數有什麼區別。唉~怎麼這麼糾結啊~果然對一門語言深入學習是很蛋疼的事情啊,還好暫時不打算深入學習python。

    在一個類方法中,如果使用self(其實可以使用其他名字代替,例如this,使用self只是一種約定,目的是為了統一代碼風格,增強可讀性)作為第一個參數,那麼這個函數將視為這個類中的執行個體方法,通過類不能直接存取。如果我們將第一個參數設為cls(同self一樣,也是一種約定),那麼這個函數在類中將被視為類函數,同時,這個函數需要使用classmethod函數來將其轉換成真正的類方法(現在一般都是用decorator)。如果我們並不將類或者執行個體作為第一個參數,那麼這個函數將被視為靜態函數,同時,與類方法類似,我們需要使用staticmethod函數將這個函數轉換成真正的靜態方法。

    所以,我們可以看出,在定義靜態方法的時候,我們並沒有像類方法或者執行個體方法一樣,將類或者執行個體作為第一個參數傳遞個方法,而區別也就在這裡了。因為在類方法中的第一個參數是類,因此,我們可以在函數中使用這個引用。也就是說,當我們需要使用類的引用的時候我們需要使用類方法。不需要使用類的引用的時候則可以使用靜態方法。就如同官方文檔中《Descriptor HowTo Guide》中的“Static Methods and Class Methods”中所講的:

    對靜態方法:“there may be useful functions which are conceptually related but do not depend on the data.”

    對類方法:“This behavior is useful whenever the function only needs to have a class reference and does not care about any underlying data.”

    當然,這並不是絕對的,我們同樣可以使用靜態方法完成類方法所要完成的,畢竟,我們可以在靜態方法中定義一個變數作為類的引用。所以我覺得類方法只是一個使用類引用的靜態方法,是一種類似文法糖的存在。也許有人會說,並沒有什麼說靜態方法與類綁定了,而卻到處都有說類方法與類綁定了。不過我認為,因為不論是靜態方法還是類方法其實都是生存在統一命名空間之中的,也就是說它們都是與所在類有一種綁定的關係。只不過由於類方法的第一個參數是類,所以類方法對類存在著另一種綁定的關係。

   初學python,個人觀點,不喜勿噴,錯誤請指正,共同學習探討。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.