class Bird:# classmethod修飾的方法是類方法@classmethoddef fly (cls):print('類方法fly: ?',cls)# staticmethod修飾的方法是靜態方法# @staticmethoddef info (p):print('靜態方法info: ', p)if __name__ == '__main__':# 調用類方法,Bird類會自動綁定到第一個參數Bird.fly() ?#①# 調用靜態方法,不會自動綁定,因此程序必須手動綁定第一個參數Bird.info('crazyit')# # 創建Bird對象b = Bird()# # 使用對象調用fly()類方法,其實依然還是使用類調用,# # 因此第一個參數依然被自動綁定到Bird類b.fly() ?#②# # 使用對象調用info()靜態方法,其實依然還是使用類調用,# # 因此程序必須為第一個參數執行綁定b.info('網絡毒劉')
?
總結
實例方法只能被實例對象調用,靜態方法(由@staticmethod裝飾的方法)、類方法(由@classmethod裝飾的方法),可以被類或類的實例對象調用。
?
?
實例方法,第一個參數必須要默認傳實例對象,一般習慣用self。
靜態方法,參數沒有要求。
?
類方法,第一個參數必須要默認傳類,一般習慣用cls。