面向物件--類方法和靜態方法
阿新 • • 發佈:2020-09-14
靜態方法和類方法
1. 類方法
是類物件所擁有的方法,需要用修飾器@classmethod
來標識其為類方法,對於類方法,第一個引數必須是類物件,一般以cls
作為第一個引數(當然可以用其他名稱的變數作為其第一個引數,但是大部分人都習慣以'cls'作為第一個引數的名字,就最好用'cls'了),能夠通過例項物件和類物件去訪問。
class People(object):
# 私有類屬性
__country = 'china'
#類方法,用classmethod來進行修飾
@classmethod
def get_country(cls):
return cls.__country
p = People()
print(p.get_country()) #可以用過例項物件引用
print(People.get_country()) #可以通過類物件引用
類方法還有一個用途就是可以對類屬性進行修改:
class People(object):
# 私有類屬性
__country = 'china'
#類方法,用classmethod來進行修飾
@classmethod
def get_country(cls):
return cls.__country
@classmethod
def set_country(cls,country):
cls.__country = country
p = People()
print(p.get_country()) #可以用過例項物件訪問
print(People.get_country()) #可以通過類訪問
p.set_country('japan')
print(p.get_country())
print(People.get_country())
結果顯示在用類方法對類屬性修改之後,通過類物件和例項物件訪問都發生了改變
2. 靜態方法
需要通過修飾器@staticmethod
來進行修飾,靜態方法不需要多定義引數,可以通過物件和類來訪問。
class People(object):
country = 'china'
@staticmethod
#靜態方法
def get_country():
return People.country
p = People()
# 通過物件訪問靜態方法
p.get_contry()
# 通過類訪問靜態方法
print(People.get_country())
總結
- 從類方法和例項方法以及靜態方法的定義形式就可以看出來,類方法的第一個引數是類物件cls,那麼通過cls引用的必定是類物件的屬性和方法;
- 例項方法的第一個引數是例項物件self,那麼通過self引用的可能是類屬性、也有可能是例項屬性(這個需要具體分析),不過在存在相同名稱的類屬性和例項屬性的情況下,例項屬性優先順序更高。
- 靜態方法中不需要額外定義引數,因此在靜態方法中引用類屬性的話,必須通過類例項物件來引用