天天看點

靜态方法和類成員方法

看書看到這裡有些費解,雖然書中并沒用重點介紹,但是還是希望可以搞清楚一些。

靜态方法:無需self參數,能被類本身和類執行個體調用,但不能通路執行個體變量,用staticmethod類型對象包裝(Python 2.4之前)

類成員方法:需要類似于self的cls參數,能被類本身和類執行個體調用,可以通路執行個體變量,用classmethod類型對象包裝

執行個體方法:必須有self參數,不能被類本身調用(必須綁定到一個執行個體上)

Python 2.4之後引入一個包裝方法:裝飾器(@)

class mClass(object):
    InstanceVariable = 3
    
    def __init__(self):
        self.value1 = 1
        
    def insmeth(self):
        self.value2 = 2
        print self.InstanceVariable + self.value1 + self.value2 , self
     
    @staticmethod    
    def smeth():
        value3 = 3
        # print InstanceVariable 不可引用執行個體變量
        print value3
    
    @classmethod
    def cmeth(cls):
        cls.value4 = 4
        print cls.value4 + cls.InstanceVariable , cls #可引用執行個體變量
        
if __name__ =='__main__':
    mClass.smeth()  # 靜态方法
    mClass.cmeth()  # 類方法
    m = mClass()    
    m.insmeth()     # 執行個體方法
           

運作結果為:

3
7 <class '__main__.mClass'>
6 <__main__.mClass object at 0x024EA3D0>
           

寫在後面,關于自己的了解幾乎沒有,都是書上和一些部落格的内容。今後随着學習的深入,會逐漸加入自己的了解。