靜態方法和類方法
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參考的可能是類屬性、也有可能是實體屬性(這個需要具體分析),不過在存在相同名稱的類屬性和實體屬性的情況下,實體屬性優先級更高,
- 靜態方法中不需要額外定義引數,因此在靜態方法中參考類屬性的話,必須通過類實體物件來參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39727.html
標籤:Python
