1. 程式人生 > >靜態方法@staticmethod和類方法@classmethod的異同

靜態方法@staticmethod和類方法@classmethod的異同

我們都知道,普通的類方法需要經過例項化物件後,才能呼叫使用 而經過@staticmethod和@classmethod裝飾後的類方法這不需要例項化來呼叫,可以直接用類名來呼叫,類名.方法名(),但是也能夠例項化後呼叫

這有利於組織程式碼,把某些應該屬於某個類的函式給放到那個類裡去,同時有利於名稱空間的整潔。

區別: @staticmethod不用表示自身物件的self引數,也不用表示自身類的cls引數,用法就像普通函式一樣,呼叫類屬性和方法時,用類名.屬性名和類名.方法名()

@classmethond也沒有表示自身物件的self引數,但是有一個表示自身類的引數cls,呼叫類屬性和方法時,用cls.屬性呼叫類屬性,用cls().方法()呼叫類方法

class Base(object):  
    num = 1  
    def func(self):  
        print('abc') 
 
    @staticmethod  
    def static_func():  
        print('static_abc')  
        print(Base.num)  
        Base().func()
 
    @classmethod  
    def class_func(cls):  
        print('class_abc') 
        print(cls.num)
        cls().func()
  
Base.static_func()  
Base.class_func()  
a = Base()
a.func()

輸出: static_abc 1 abc class_abc 1 abc abc