Python中實(shí)例方法、類(lèi)方法、靜態(tài)方法三者的區(qū)別是什么-創(chuàng)新互聯(lián)

本篇文章為大家展示了Python中實(shí)例方法、類(lèi)方法、靜態(tài)方法三者的區(qū)別是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的梧州網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

實(shí)例方法

    定義:第一個(gè)參數(shù)必須是實(shí)例對(duì)象,該參數(shù)名一般約定為“self”,通過(guò)它來(lái)傳遞實(shí)例的屬性和方法(也可以傳類(lèi)的屬性和方法);

    調(diào)用:只能由實(shí)例對(duì)象調(diào)用。

類(lèi)方法

    定義:使用裝飾器@classmethod。第一個(gè)參數(shù)必須是當(dāng)前類(lèi)對(duì)象,該參數(shù)名一般約定為“cls”,通過(guò)它來(lái)傳遞類(lèi)的屬性和方法(不能傳實(shí)例的屬性和方法);

    調(diào)用:實(shí)例對(duì)象和類(lèi)對(duì)象都可以調(diào)用。

靜態(tài)方法

    定義:使用裝飾器@staticmethod。參數(shù)隨意,沒(méi)有“self”和“cls”參數(shù),但是方法體中不能使用類(lèi)或?qū)嵗娜魏螌傩院头椒ǎ?/p>

    調(diào)用:實(shí)例對(duì)象和類(lèi)對(duì)象都可以調(diào)用。

實(shí)例方法

簡(jiǎn)而言之,實(shí)例方法就是類(lèi)的實(shí)例能夠使用的方法。這里不做過(guò)多解釋。

類(lèi)方法

使用裝飾器@classmethod

原則上,類(lèi)方法是將類(lèi)本身作為對(duì)象進(jìn)行操作的方法。假設(shè)有個(gè)方法,且這個(gè)方法在邏輯上采用類(lèi)本身作為對(duì)象來(lái)調(diào)用更合理,那么這個(gè)方法就可以定義為類(lèi)方法。另外,如果需要繼承,也可以定義為類(lèi)方法。

如下場(chǎng)景:

假設(shè)我有一個(gè)學(xué)生類(lèi)和一個(gè)班級(jí)類(lèi),想要實(shí)現(xiàn)的功能為:
    執(zhí)行班級(jí)人數(shù)增加的操作、獲得班級(jí)的總?cè)藬?shù);
    學(xué)生類(lèi)繼承自班級(jí)類(lèi),每實(shí)例化一個(gè)學(xué)生,班級(jí)人數(shù)都能增加;
    最后,我想定義一些學(xué)生,獲得班級(jí)中的總?cè)藬?shù)。

思考:這個(gè)問(wèn)題用類(lèi)方法做比較合適,為什么?因?yàn)槲覍?shí)例化的是學(xué)生,但是如果我從學(xué)生這一個(gè)實(shí)例中獲得班級(jí)總?cè)藬?shù),在邏輯上顯然是不合理的。同時(shí),如果想要獲得班級(jí)總?cè)藬?shù),如果生成一個(gè)班級(jí)的實(shí)例也是沒(méi)有必要的。

class ClassTest(object):
  __num = 0
  @classmethod
  def addNum(cls):
    cls.__num += 1
  @classmethod
  def getNum(cls):
    return cls.__num
  # 這里我用到魔術(shù)方法__new__,主要是為了在創(chuàng)建實(shí)例的時(shí)候調(diào)用累加方法。
  def __new__(self):
    ClassTest.addNum()
    return super(ClassTest, self).__new__(self)
class Student(ClassTest):
  def __init__(self):
    self.name = ''
a = Student()
b = Student()
print(ClassTest.getNum())

靜態(tài)方法

使用裝飾器@staticmethod

靜態(tài)方法是類(lèi)中的函數(shù),不需要實(shí)例。靜態(tài)方法主要是用來(lái)存放邏輯性的代碼,邏輯上屬于類(lèi),但是和類(lèi)本身沒(méi)有關(guān)系,也就是說(shuō)在靜態(tài)方法中,不會(huì)涉及到類(lèi)中的屬性和方法的操作??梢岳斫鉃?,靜態(tài)方法是個(gè)獨(dú)立的、單純的函數(shù),它僅僅托管于某個(gè)類(lèi)的名稱空間中,便于使用和維護(hù)。

譬如,我想定義一個(gè)關(guān)于時(shí)間操作的類(lèi),其中有一個(gè)獲取當(dāng)前時(shí)間的函數(shù)。

import time
class TimeTest(object):
  def __init__(self, hour, minute, second):
    self.hour = hour
    self.minute = minute
    self.second = second
  @staticmethod
  def showTime():
    return time.strftime("%H:%M:%S", time.localtime())
print(TimeTest.showTime())
t = TimeTest(2, 10, 10)
nowTime = t.showTime()
print(nowTime)

如上,使用了靜態(tài)方法(函數(shù)),然而方法體中并沒(méi)使用(也不能使用)類(lèi)或?qū)嵗膶傩裕ɑ蚍椒ǎ?。若要獲得當(dāng)前時(shí)間的字符串時(shí),并不一定需要實(shí)例化對(duì)象,此時(shí)對(duì)于靜態(tài)方法而言,所在類(lèi)更像是一種名稱空間。

上述內(nèi)容就是Python中實(shí)例方法、類(lèi)方法、靜態(tài)方法三者的區(qū)別是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

名稱欄目:Python中實(shí)例方法、類(lèi)方法、靜態(tài)方法三者的區(qū)別是什么-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://muchs.cn/article48/cshihp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)