溫馨提示×

溫馨提示×

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

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

python3類中的裝飾方法怎么選擇

發(fā)布時間:2020-11-17 09:46:20 來源:億速云 閱讀:141 作者:小新 欄目:編程語言

小編給大家分享一下python3類中的裝飾方法怎么選擇,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

@classmethod 用來修飾方法。使用在實(shí)例化前與類進(jìn)行交互,但不和其實(shí)例進(jìn)行交互的函數(shù)方法上。

 @staticmethod 用來修飾類的靜態(tài)方法。使用在有些與類相關(guān)函數(shù),但不使用該類或該類的實(shí)例。如更改環(huán)境變量、修改其他類的屬性等。

 兩者最明顯的區(qū)別,classmethod 必須使用類的對象作為第一個參數(shù),而staticmethod則可以不傳遞任何參數(shù)

 

1、@classmethod 類方法

類方法,我們不用通過實(shí)例化類就能訪問的方法。而且@classmethod 裝飾的方法不能使用實(shí)例屬性,只能是類屬性。它主要使用在和類進(jìn)行交互,但不和其實(shí)例進(jìn)行交互的函數(shù)方法上。

下面,我們要寫一個只在類中運(yùn)行而不在實(shí)例中運(yù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ū)嵗椒ㄒ粯樱?/span>

 @staticmethod使用在有些和類相關(guān)函數(shù),但不使用該類或者該類的實(shí)例。如更改環(huán)境變量、修改其他類的屬性等。

一句話@staticmethod 修飾的方法是放在類外的函數(shù),我們?yōu)榱朔奖銓⑺苿拥搅祟惱锩妫鼘︻惖倪\(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

看完了這篇文章,相信你對python3類中的裝飾方法怎么選擇有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI