盡管classmethod和staticmethod非常相似,但在用法上依然有一些明顯的區別。classmethod必須有一個指向類對象的引用作為第一個參數,而staticmethod可以沒有任何參數。
舉個栗子:
classNum:
#普通方法:能用Num調用而不能用實例化對象調用
defone():
print('1')
#實例方法:能用實例化對象調用而不能用Num調用
deftwo(self):
print('2')
#靜態方法:能用Num和實例化對象調用
@staticmethod
defthree():
print('3')
#類方法:第一個參數cls長什么樣不重要,都是指Num類本身,調用時將Num類作為對象隱式地傳入方法
@classmethod
defgo(cls):
cls.three()
Num.one()#1
#Num.two()#TypeError:two()missing1requiredpositionalargument:'self'
Num.three()#3
Num.go()#3
i=Num()
#i.one()#TypeError:one()takes0positionalargumentsbut1wasgiven
i.two()#2
i.three()#3
i.go()#3
以上內容為大家介紹了Python靜態方法和類方法區別?希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。