盡管classmethod和staticmethod非常相似,但在用法上依然有一些明顯的區(qū)別。classmethod必須有一個(gè)指向類對(duì)象的引用作為第一個(gè)參數(shù),而staticmethod可以沒有任何參數(shù)。
舉個(gè)栗子:
classNum:
#普通方法:能用Num調(diào)用而不能用實(shí)例化對(duì)象調(diào)用
defone():
print('1')
#實(shí)例方法:能用實(shí)例化對(duì)象調(diào)用而不能用Num調(diào)用
deftwo(self):
print('2')
#靜態(tài)方法:能用Num和實(shí)例化對(duì)象調(diào)用
@staticmethod
defthree():
print('3')
#類方法:第一個(gè)參數(shù)cls長什么樣不重要,都是指Num類本身,調(diào)用時(shí)將Num類作為對(duì)象隱式地傳入方法
@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
以上內(nèi)容為大家介紹了Python靜態(tài)方法和類方法區(qū)別?希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。