溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python的類方法classmethod怎么使用

發(fā)布時間:2021-11-25 09:25:28 來源:億速云 閱讀:323 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“python的類方法classmethod怎么使用”,在日常操作中,相信很多人在python的類方法classmethod怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python的類方法classmethod怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

@classmethod的定義

@classmethod是裝飾器,用來指定類中的某個方法是類的綁定方法。

@classmethod裝飾與否的區(qū)別

  • 實例的綁定方法

在類中定義的方法默認(rèn)是實例的綁定方法,實例的綁定方法第一參數(shù)是self,self指代實例的命名空間內(nèi)存地址。必須有實例才能調(diào)用。

調(diào)用方式有2種:一是“實例.方法名()”,二是“類名.方法名(實例名)”,調(diào)用的前提是已創(chuàng)建了實例,沒有實例調(diào)用會報錯!

  • 類的綁定方法

在類中定義的方法前加上@classmethod裝飾表示它是類的綁定方法,類中的綁定方法第一參數(shù)是cls,cls指代類的命名空間內(nèi)存地址。有沒有實例都可以調(diào)用。

調(diào)用方式有2種:一種是“類名.方法名()”,二是“實例.方法名()”,調(diào)用前不需要創(chuàng)建實例,沒有實例也可以調(diào)用。

@classmethod運用場景

常見的運用場景有2種,一是調(diào)用類的綁定方法創(chuàng)建實例;二是修改類的私有屬性。

案例一,調(diào)用類的綁定方法創(chuàng)建實例:

import timeclass Date:def __init__(self, year, month, day):self.year = year
        self.month = month
        self.day = day

    @classmethoddef today(cls):now = time.localtime()return Date(now.tm_year, now.tm_mon, now.tm_mday)today = Date.today()print(f'今天是“{today.year}年{today.month}月{today.day}日”')out:今天是“2020年11月9日”

講解

上述Date類中有2個方法,一個是__init__即實例的初始化方法,另一個是today即類的綁定方法,通過調(diào)用Date.today()可以無參數(shù)自主創(chuàng)建實例。這個在實際生產(chǎn)中經(jīng)常會用到。請用心體類的綁定方法創(chuàng)建實例的方式。

案例二,調(diào)用類的綁定方法修改類的私有屬性:

class Goods:__discount = 1  # 折扣比例def __init__(self, name, price):self.name = name  # 商品名稱self.price = price  # 商品價格@propertydef total(self):  # 商品總價return self.price*self.__discount

    @classmethoddef change_discount(cls, n):Goods.__discount = n


apple = Goods('蘋果', 5)print(apple.total)Goods.change_discount(0.8)print(apple.total)pear = Goods('梨', 4)print(pear.total)out:54.03.2

上述代碼中類的私有屬性discount是控制全場商品折扣比例,在類的外部無法修改私有屬性。只能在類的內(nèi)部定義類的綁定方法來修改類的私有屬性。

請注意實例的屬性和類的屬性區(qū)別:

實例的屬性是存儲在實例各自的命名空間中,所以有多少個實例就會有多少份相應(yīng)的實例屬性。

類的屬性是存儲在類的命名空間中,所以類的屬性只有一份(無論有多少個實例)。

到此,關(guān)于“python的類方法classmethod怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI