python中的類方法和靜態方法

2021-09-08 08:16:37 字數 1606 閱讀 6617

python中至少有三種比較常見的方法型別,即例項方法,類方法、靜態方法。它們是如何定義的呢?

如何呼叫的呢?它們又有何區別和作用呢?

首先,這三種方法都定義在類中。

例項方法

定義:第乙個引數必須是例項物件,該引數名一般約定為「self」,通過它來傳遞例項的屬性和方法(也可以傳類的屬性和方法);

呼叫:只能由例項物件呼叫。

類方法定義:使用裝飾器@classmethod。第乙個引數必須是當前類物件,該引數名一般約定為「cls」,

通過它來傳遞類的屬性和方法(不能傳例項的屬性和方法);

呼叫:例項物件和類物件都可以呼叫。

靜態方法

定義:使用裝飾器@staticmethod。引數隨意,沒有「self」和「cls」引數,但是方法體中不能使用類或例項的任何屬性和方法;

呼叫:例項物件和類物件都可以呼叫。

@classmethod

def today(cls):

"construct a date from time.time()."

t = _time.time()

return cls.fromtimestamp(t)

@classmethod

def fromordinal(cls, n):

y, m, d = _ord2ymd(n)

return cls(y, m, d)

舉例:

from datetime import  date

class date(object):

def __init__(self, year, month, day):

self.__year = year

self.__month = month

self.__day = day

# 例項方法,

def echo(self):

print("%s %s %s" % (self.__year, self.__month, self.__day))

# 預設情況下, 需要將所有相關日期的操作封裝到date類中;

# 如果不做任何改變, s實質上時例項化的物件本身, 不是我們想要的字串;

@classmethod # 類方法

def as_string(cls, s): # "2019-10-10"

year, month, day = s.split('-')

return cls(year, month, day) # cls實質上就是date

@staticmethod

def is_valid(s):

year, month, day = map(int, s.split('-'))

return year > 0 and 0 < month <= 12 and 1 <= day <= 31

if __name__ == "__main__":

# 例項化日期類

d = date(2019, 10, 2)

s = "2019-10-10"

# date.as_string(s).echo()

print(date.is_valid(s))

Python中類方法和靜態方法

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

Python中的類方法和靜態方法

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

Python 中的類方法和靜態方法

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