【python】classmethod 和staticmethod

對於classmethod和staticmethod 是之前學類的時候看了一下,知道是類成員方法和靜態方法,今天又看到類方法,然後又搜了下,發現自己瞭解的並不透徹,所以總結一下。

首先classmethod 是類方法,所謂的類方法就是它的第一個參數是本類,是當前的類,它僅僅與類交互,而並不與實例進行交互。所以它是不可以訪問實例變量的,但是它可以訪問類變量。

對於staticmethod是靜態方法,它不用傳入self。而且它不可以調用類和實例中的變量。可以理解成它只是在類作用域中的一個函數而已。

普通方法:由對象調用;至少一個self參數;執行普通方法時,自動將調用該方法的對象賦值給self;
類方法:由類調用; 至少一個cls參數;執行類方法時,自動將調用該方法的類複製給cls;
靜態方法:由類調用;無默認參數;(可以類比下靜態屬性啊)

在python2.4以後 我們可以使用生成器來實現靜態方法和類成員方法。

下面是一個例子:

class MyClass:
    val1 = 'Value 1'
    def __init__(self):
        self.val2 = 'Value 2'

    @staticmethod
    def staticmd():
        print '靜態方法,無法訪問val1和val2'

    @classmethod
    def classmd(cls):
        print '類方法,類:' + str(cls) + ',val1:' + cls.val1 + ',無法訪問val2的值'

另外,知乎上有一篇很好的文章來講解這個,圖解很好,可以看下。
https://www.zhihu.com/question/20021164

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章