上一篇文章為:→3.7.8類屬性、實例屬性
靜態(tài)方法和類方法
1. 類方法
是類對象所擁有的方法捌蚊,需要用修飾器@classmethod
來標識其為類方法集畅,對于類方法,第一個參數(shù)必須是類對象缅糟,一般以cls
作為第一個參數(shù)(當然可以用其他名稱的變量作為其第一個參數(shù)挺智,但是大部分人都習慣以'cls'作為第一個參數(shù)的名字,就最好用'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()
day08_python面向?qū)ο?2-01.png
結(jié)果顯示在用類方法對類屬性修改之后沐扳,通過類對象和實例對象訪問都發(fā)生了改變
2. 靜態(tài)方法
需要通過修飾器@staticmethod
來進行修飾,靜態(tài)方法不需要多定義參數(shù)
class People(object):
country = 'china'
@staticmethod
#靜態(tài)方法
def getCountry():
return People.country
print People.getCountry()
總結(jié)
從類方法和實例方法以及靜態(tài)方法的定義形式就可以看出來句占,類方法的第一個參數(shù)是類對象cls沪摄,那么通過cls引用的必定是類對象的屬性和方法;而實例方法的第一個參數(shù)是實例對象self纱烘,那么通過self引用的可能是類屬性杨拐、也有可能是實例屬性(這個需要具體分析),不過在存在相同名稱的類屬性和實例屬性的情況下擂啥,實例屬性優(yōu)先級更高哄陶。靜態(tài)方法中不需要額外定義參數(shù),因此在靜態(tài)方法中引用類屬性的話哺壶,必須通過類對象來引用