靜態⽅法和類⽅法
轉載於:https://blog.csdn.net/qq_41020281/article/details/79634707
1. 類⽅法
是類對象所擁有的⽅法,需要⽤修飾器 @classmethod 來標識其為類⽅法, 對於類⽅法,第⼀個參數必須是類對象,⼀般以 cls 作為第⼀個參數(當然 可以⽤其他名稱的變量作為其第⼀個參數,但是⼤部分⼈都習慣以'cls'作為第 ⼀個參數的名字,就最好⽤'cls'了),能夠通過實例對象和類對象去訪問。
class People(object):
country = 'china'
#類⽅法,⽤classmethod來進⾏修飾
@classmethod
def getCountry(cls):
return cls.country
p = People()
print p.getCountry() #可以⽤過實例對象引⽤
print People.getCountry() #可以通過類對象引⽤
類⽅法還有⼀個⽤途就是可以對類屬性進⾏修改:
class People(object):
country = 'china'
#類⽅法,⽤classmethod來進⾏修飾
@classmethod
def getCountry(cls):
return cls.country
@classmethod
def setCountry(cls,country):
cls.country = country
p = People()
print p.getCountry() #可以⽤過實例對象引⽤
print People.getCountry() #可以通過類對象引⽤
p.setCountry('japan')
print p.getCountry()
print People.getCountry()
結果顯示在⽤類⽅法對類屬性修改之后,通過類對象和實例對象訪問都發⽣ 了改變
2. 靜態⽅法
需要通過修飾器 @staticmethod 來進⾏修飾,靜態⽅法不需要多定義參數
class People(object):
country = 'china'
@staticmethod
#靜態⽅法
def getCountry():
return People.country
print People.getCountry()
總結 從類⽅法和實例⽅法以及靜態⽅法的定義形式就可以看出來,類⽅法的第⼀ 個參數是類對象cls,那么通過cls引⽤的必定是類對象的屬性和⽅法;⽽實例 ⽅法的第⼀個參數是實例對象self,那么通過self引⽤的可能是類屬性、也有 可能是實例屬性(這個需要具體分析),不過在存在相同名稱的類屬性和實 例屬性的情況下,實例屬性優先級更⾼。靜態⽅法中不需要額外定義參數, 因此在靜態⽅法中引⽤類屬性的話,必須通過類對象來引⽤