Python中的類方法和靜態方法

2021-08-31 13:50:09 字數 1539 閱讀 7711

1. 類方法

是類物件所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第乙個引數必須是類物件,一般以cls作為第乙個引數(當然可以用其他名稱的變數作為其第乙個引數,但是大部分人都習慣以'cls'作為第乙個引數的名字,就最好用'cls'了),能夠通過例項物件和類物件去訪問。

classpeople(object):

country = 'china'#類方法,用classmethod來進行修飾  

@classmethod

def getcountry(cls)

: return cls.country

p = people() print

p.getcountry() #可以用過例項物件引用

print people.getcountry() #可以通過類物件引用

類方法還有乙個用途就是可以對類屬性進行修改:

classpeople(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來進行修飾,靜態方法不需要多定義引數

classpeople(object):

country = 'china'

@staticmethod#靜態方法

def getcountry()

: return people.country

print people.getcountry()

總結從類方法和例項方法以及靜態方法的定義形式就可以看出來,類方法的第乙個引數是類物件cls,那麼通過cls引用的必定是類物件的屬性和方法;而例項方法的第乙個引數是例項物件self,那麼通過self引用的可能是類屬性、也有可能是例項屬性(這個需要具體分析),不過在存在相同名稱的類屬性和例項屬性的情況下,例項屬性優先順序更高。靜態方法中不需要額外定義引數,因此在靜態方法中引用類屬性的話,必須通過類物件來引用

方法類別

語法描述

類方法@classmethod

第乙個形參cls。預設傳遞

靜態方法

@staticmethod

沒有預設傳遞的形參

物件方法(成員方法)

def  方法名

第乙個形參self ,預設傳遞

Python中類方法和靜態方法

要在類中使用靜態方法,需在靜態方法前面加上 staticmethod標記符,以表示下面的成員函式是靜態函式。使用靜態方法的好處 其函式不需要self引數,可以通過類呼叫該方法,不需要定義該類例項 當然通過類例項呼叫也沒有問題 類方法可以通過類或它的例項來呼叫,但 該方法的 第乙個引數cls是定義該方...

python中的類方法和靜態方法

python中至少有三種比較常見的方法型別,即例項方法,類方法 靜態方法。它們是如何定義的呢?如何呼叫的呢?它們又有何區別和作用呢?首先,這三種方法都定義在類中。例項方法 定義 第乙個引數必須是例項物件,該引數名一般約定為 self 通過它來傳遞例項的屬性和方法 也可以傳類的屬性和方法 呼叫 只能由...

Python 中的類方法和靜態方法

1 靜態方法 1 格式 在方法上面新增 staticmethod 2 引數 靜態方法可以有引數也可以無引數 3 應用場景 一般用於和類物件以及例項物件無關的 4 使用方式 類名.靜態方法名 或者物件名.靜態方法名 class hello object staticmethod def say pri...