最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的classmethod與staticmethod

 更新時(shí)間:2022年01月26日 11:42:03   作者:咕嘟咕嘟_  
這篇文章主要介紹了python中的classmethod與staticmethod,

1.靜態(tài)方法(staticmethod)

靜態(tài)方法:

@staticmethod也是一個(gè)類(lèi)方法,是可以直接類(lèi)調(diào)用的。個(gè)人認(rèn)為的使用場(chǎng)景是:只要要定義的方法里不涉及到self參數(shù),就用靜態(tài)方法承擔(dān)。因?yàn)檫@樣就表明這個(gè)方法和本身的類(lèi)沒(méi)有關(guān)系,明確的區(qū)別出類(lèi)相關(guān)和不相關(guān)。

class A:
? ? def __init__(self, a, b):
? ? ? ? self.a = a
? ? ? ? self.b = b

? ? def do_normal_something(self, a, b):
? ? ? ? print("do_normal_something",a,b)

? ? @staticmethod
? ? def do_static_something(a,b):
? ? ? ? print('do_static_something',a,b)

? ? @classmethod
? ? def do_class_something(cls):
? ? ? ? pass

? ? def __call__(self,a,b):
? ? ? ? print("123call",a,b)

a = A(1,2)
a.do_normal_something(7,8)
a.do_static_something(5,6)

2.類(lèi)方法(classmethod)

為什么會(huì)出現(xiàn)classmethod

classmethod設(shè)計(jì)的目的是什么呢?事實(shí)上與Python面向?qū)ο缶幊逃嘘P(guān)的,由于Python不支持多個(gè)的參數(shù)重載構(gòu)造函數(shù),比方在C++里,構(gòu)造函數(shù)能夠依據(jù)參數(shù)個(gè)數(shù)不一樣。能夠?qū)懚鄠€(gè)構(gòu)造函數(shù)。Python為了解決問(wèn)題,採(cǎi)用classmethod修飾符的方式,這樣定義出來(lái)的函數(shù)就能夠在類(lèi)對(duì)象實(shí)例化之前調(diào)用這些函數(shù),就相當(dāng)于多個(gè)構(gòu)造函數(shù),解決多個(gè)構(gòu)造函數(shù)的代碼寫(xiě)在類(lèi)外面的問(wèn)題。

  • 類(lèi)最基本的作用是實(shí)例化出一個(gè)對(duì)象,但是有的時(shí)候在實(shí)例化之前,就需要先和類(lèi)做一定的交互,這種交互可能會(huì)影響實(shí)際實(shí)例化的過(guò)程,所以必須放在調(diào)用構(gòu)造函數(shù)之前。大概也可能是因?yàn)檫@個(gè)原因出現(xiàn)了classmethod
  • 直接一點(diǎn)來(lái)說(shuō),我們知道對(duì)于一個(gè)普通的類(lèi),我們要使用其中的方法的話,需要對(duì)類(lèi)進(jìn)行實(shí)例化,而一個(gè)類(lèi)中,某個(gè)函數(shù)前面加上了staticmethod或者classmethod的話,那么這個(gè)函數(shù)就可以不通過(guò)實(shí)例化直接調(diào)用,可以通過(guò)類(lèi)名進(jìn)行調(diào)用的
  • @classmethod 定義的類(lèi)方法是可選構(gòu)造函數(shù)中,我們定義了一個(gè)類(lèi)方法,類(lèi)方法的第一個(gè)參數(shù)(cls)指代的就是類(lèi)本身。類(lèi)方法會(huì)用這個(gè)類(lèi)來(lái)創(chuàng)建并返回最終的實(shí)例。使用類(lèi)方法的另一個(gè)好處就是在繼承的時(shí)候,保證了子類(lèi)使用可選構(gòu)造函數(shù)構(gòu)造出來(lái)的類(lèi)是子類(lèi)的實(shí)例而不是父類(lèi)的實(shí)例。

案例:

class Data_test(object):

? ? def __init__(self, year=0, month=0, day=0):
? ? ? ? self.day = day
? ? ? ? self.month = month
? ? ? ? self.year = year

? ? def out_date(self):
? ? ? ? print('year:',self.year,'month:',self.month,'day:',self.day)

t = Data_test(2016, 8, 1)
t.out_date()

但是如果用戶(hù)輸入的是 “2016-8-1” 這樣的字符格式,那么就需要調(diào)用Date_test 類(lèi)前做一下處理:

class Data_test(object):

? ? def __init__(self, year=0, month=0, day=0):
? ? ? ? self.day = day
? ? ? ? self.month = month
? ? ? ? self.year = year

? ? def out_date(self):
? ? ? ? print('year:',self.year,'month:',self.month,'day:',self.day)


string_date = '2016-8-1'
year, month, day = map(int, string_date.split('-'))
s = Data_test(year, month, day)
s.out_date()

先把‘2016-8-1’ 分解成 year,month,day 三個(gè)變量,然后轉(zhuǎn)成int,再調(diào)用Date_test(year,month,day)函數(shù)。 也很符合期望。

那我可不可以把這個(gè)字符串處理的函數(shù)放到 Date_test 類(lèi)當(dāng)中呢?

那么@classmethod 就開(kāi)始出場(chǎng)了

class Data_test(object):

? ? def __init__(self, year=0, month=0, day=0):
? ? ? ? self.day = day
? ? ? ? self.month = month
? ? ? ? self.year = year

? ? @classmethod
? ? def getdata(cls,str): #cls表示調(diào)用當(dāng)前類(lèi)名
? ? ? ? year, month, day = map(int, string_date.split('-'))
? ? ? ? s = cls(year,month,day)
? ? ? ? return s #返回一個(gè)初始化的類(lèi)

? ? def out_date(self):
? ? ? ? print('year:',self.year,'month:',self.month,'day:',self.day)


string_date = '2016-8-1'
s = Data_test.getdata(string_date)
s.out_date()

在繼承時(shí)也能工作的很好:

類(lèi)方法的一個(gè)主要用途就是定義多個(gè)構(gòu)造器。它接受一個(gè)class 作為第一個(gè)參數(shù)(cls)。在繼承時(shí)也能工作的很好:

import time

class Data:
? ? #主要構(gòu)造器
? ? def __init__(self,y,m,d):
? ? ? ? self.year = y
? ? ? ? self.month = m
? ? ? ? self.day = d
? ? ? ? print('year:', self.year, 'month:', self.month, 'day:', self.day)
? ? # 可選擇的構(gòu)造器
? ? @classmethod
? ? def today(cls):
? ? ? ? t = time.localtime()
? ? ? ? return cls(t.tm_year,t.tm_mon,t.tm_mday)

a = Data(2022,1,13) #主要構(gòu)造器
b = Data.today() #可選擇的構(gòu)造器

class NewData(Data):
? ? pass
c = NewData.today() #繼承的時(shí)候也可照樣工作

 到此這篇關(guān)于python中的classmethod與staticmethod的文章就介紹到這了,更多相關(guān)python的classmethod和staticmethod內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)京東秒殺功能代碼

    Python實(shí)現(xiàn)京東秒殺功能代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)京東秒殺功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • numpy判斷數(shù)值類(lèi)型、過(guò)濾出數(shù)值型數(shù)據(jù)的方法

    numpy判斷數(shù)值類(lèi)型、過(guò)濾出數(shù)值型數(shù)據(jù)的方法

    今天小編就為大家分享一篇numpy判斷數(shù)值類(lèi)型、過(guò)濾出數(shù)值型數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python中return的返回和執(zhí)行實(shí)例

    python中return的返回和執(zhí)行實(shí)例

    今天小編就為大家分享一篇python中return的返回和執(zhí)行實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 何用Python實(shí)現(xiàn)一個(gè) “系統(tǒng)聲音” 的實(shí)時(shí)律動(dòng)掛件

    何用Python實(shí)現(xiàn)一個(gè) “系統(tǒng)聲音” 的實(shí)時(shí)律動(dòng)掛件

    這篇文章將給大家介紹了如何用 Python 實(shí)現(xiàn)一個(gè) “系統(tǒng)聲音” 的實(shí)時(shí)律動(dòng)掛件,采集后直接實(shí)時(shí)地在電腦上繪制波形動(dòng)畫(huà),主要是用來(lái)作為 FL Studio 播放時(shí)的一個(gè)桌面小掛件,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • Python文件的壓縮與解壓

    Python文件的壓縮與解壓

    這篇文章主要介紹了Python文件的壓縮與解壓,Python進(jìn)行文件、文件夾壓縮與解壓,用到的是zipfile的第三方依賴(lài)庫(kù)。根據(jù)不同應(yīng)用場(chǎng)景封裝了幾個(gè)方法,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • 使用Python在Windows下獲取USB PID&VID的方法

    使用Python在Windows下獲取USB PID&VID的方法

    今天小編就為大家分享一篇使用Python在Windows下獲取USB PID&VID的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python?協(xié)程并發(fā)數(shù)控制

    python?協(xié)程并發(fā)數(shù)控制

    這篇文章主要介紹了python?協(xié)程并發(fā)數(shù)控制,文章基于python的相關(guān)資料展開(kāi)對(duì)主題煩人詳細(xì)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Python yield使用方法示例

    Python yield使用方法示例

    這篇文章主要介紹了Python yield使用方法,大家參考使用吧
    2013-12-12
  • python 實(shí)現(xiàn)在無(wú)序數(shù)組中找到中位數(shù)方法

    python 實(shí)現(xiàn)在無(wú)序數(shù)組中找到中位數(shù)方法

    這篇文章主要介紹了python 實(shí)現(xiàn)在無(wú)序數(shù)組中找到中位數(shù)方法,具有很好對(duì)參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 教你使用Python提取視頻中的美女圖片

    教你使用Python提取視頻中的美女圖片

    這篇文章主要介紹了教你使用Python提取視頻中的美女圖片,使用?Python?寫(xiě)一個(gè)逐幀無(wú)損保存視頻畫(huà)面的小腳本,大概分為三個(gè)步驟,詳細(xì)過(guò)程跟隨小編一起看看吧
    2022-04-04

最新評(píng)論

建始县| 平邑县| 潮安县| 亳州市| 惠来县| 蓝山县| 堆龙德庆县| 濮阳市| 邛崃市| 元阳县| 筠连县| 通辽市| 筠连县| 东山县| 宝兴县| 岳西县| 金沙县| 繁昌县| 若羌县| 陆丰市| 高雄县| 巫溪县| 富源县| 鄂尔多斯市| 姚安县| 和龙市| 思茅市| 兰溪市| 思茅市| 江津市| 绥宁县| 郸城县| 盖州市| 家居| 喀喇沁旗| 林州市| 泰和县| 福州市| 新安县| 利川市| 海兴县|