小編給大家分享一下python3類中的裝飾方法怎么選擇,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)西部信息服務(wù)器租用報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。@classmethod 用來修飾方法。使用在實(shí)例化前與類進(jìn)行交互,但不和其實(shí)例進(jìn)行交互的函數(shù)方法上。
@staticmethod 用來修飾類的靜態(tài)方法。使用在有些與類相關(guān)函數(shù),但不使用該類或該類的實(shí)例。如更改環(huán)境變量、修改其他類的屬性等。
兩者最明顯的區(qū)別,classmethod 必須使用類的對(duì)象作為第一個(gè)參數(shù),而staticmethod則可以不傳遞任何參數(shù)
1、@classmethod 類方法
類方法,我們不用通過實(shí)例化類就能訪問的方法。而且@classmethod 裝飾的方法不能使用實(shí)例屬性,只能是類屬性。它主要使用在和類進(jìn)行交互,但不和其實(shí)例進(jìn)行交互的函數(shù)方法上。
下面,我們要寫一個(gè)只在類中運(yùn)行而不在實(shí)例中運(yùn)行的方法。
簡(jiǎn)單示例,讀取私有化類屬性數(shù)據(jù),如下:
class Circle(object): __pi = 3.14 def __init__(self, r): self.r = r @classmethod def pi(cls): return cls.__pi def area(self): """ 圓的面積 """ return self.r ** 2 * self.__pi print(Circle.pi()) # 沒有實(shí)例化 能直接訪問pi() 方法 circle1 = Circle(2) print(circle1.pi()) # 也可以通過實(shí)例訪問pi()方法
2、@staticmethod 靜態(tài)方法
@staticmethod 和@classmethod非常的相似,但是@staticmethod 不強(qiáng)制要求傳遞參數(shù)(它做的事與類方法或?qū)嵗椒ㄒ粯樱?/p>
@staticmethod使用在有些和類相關(guān)函數(shù),但不使用該類或者該類的實(shí)例。如更改環(huán)境變量、修改其他類的屬性等。
一句話@staticmethod 修飾的方法是放在類外的函數(shù),我們?yōu)榱朔奖銓⑺苿?dòng)到了類里面,它對(duì)類的運(yùn)行無影響。
示例:
class Date(object): day = 0 month = 0 year = 0 def __init__(self, year=0, month=0, day=0): self.day = day self.month = month self.year = year @classmethod def from_string(cls, date_as_string): year, month, day = date_as_string.split('-') date = cls(year, month, day) return date @staticmethod def is_date_valid(date_as_string): """ 用來校驗(yàn)日期的格式是否正確 """ year, month, day = date_as_string.split('-') return int(year) <= 3999 and int(month) <= 12 and int(day) <= 31 date1 = Date.from_string('2012-05-10') print(date1.year, date1.month, date1.day) is_date = Date.is_date_valid('2012-09-18') # 格式正確 返回True
看完了這篇文章,相信你對(duì)python3類中的裝飾方法怎么選擇有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!