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

Python中類方法@classmethod和靜態(tài)方法@staticmethod解析

 更新時間:2023年08月24日 10:53:35   作者:goodxin_ie  
這篇文章主要介紹了Python中類方法@classmethod和靜態(tài)方法@staticmethod解析,python中存在三種方法,分別為常規(guī)方法(定義中傳入self)、@classmethod修飾的類方法、@staticmethod修飾的靜態(tài)方法,,需要的朋友可以參考下

一、python中的方法

python中存在三種方法,分別為常規(guī)方法(定義中傳入self)、@classmethod修飾的類方法、@staticmethod修飾的靜態(tài)方法。

class A(object):
    num = 0
    def __init__(self, index = 0):
        self.index = index 
    def foo(self, x):
        print("executing foo(%s,%s)" % (self, x))
        print('self:', self)
    @classmethod
    def class_foo(cls, x):
        print("executing class_foo(%s,%s)" % (cls, x))
        print('cls:', cls.num)
    @staticmethod
    def static_foo(x):
        print("executing static_foo(%s)" % x)
a = A()

以上面的代碼為例,其中存在三種類型的方法。

1.常規(guī)方法foo()

常規(guī)方法定義時需要傳入self參數(shù),與類的實例綁定。

也就是說調(diào)用時需要先實例化類,然后該實例才擁有foo()方法,通過A().foo()的方式來調(diào)用。

不能直接用類A.foo()的方式來調(diào)用。

2.類方法class_foo()

用@classmethod修飾的方法需要傳入cls參數(shù)(代表當(dāng)前類),表示該方法與類綁定(不是實例)

在該函數(shù)內(nèi)部可以調(diào)用屬于類的專有屬性(一般來說定義在__init__外面的屬性如上面的num)。

可以直接用A.class_foo()來調(diào)用,當(dāng)然也可以直接實例化,通過實例來調(diào)用。

3.靜態(tài)方法static_foo()

用@staticmethod修飾的方法不需要傳入任何參數(shù)

該方法內(nèi)部不能訪問類或者實例的屬性,相當(dāng)于定義在類外面的普通方法。

可以直接用A.static_foo()來調(diào)用或者通過實例來調(diào)用。

二、@classmethod和@staticmethod的異同

相同點:

  • 都可以直接用類名.方法(A.xx())的方式來訪問,也可以通過實例來訪問

不同點:

  • 構(gòu)造時classmethod需要傳入cls參數(shù),staticmethod不需要
  • classmethod可以通過cls.來訪問類的專有屬性,staticmethod不能訪問類的屬性
  • classmethod可以被子類繼承,能夠判斷出是父類還是子類調(diào)用

三、使用場景

1.classmethod用在構(gòu)造前交互(即類實例化之前),一般是用來實現(xiàn)特殊的構(gòu)造函數(shù)。

e.g我們定義了Date類,需要提供day,month,year三個參數(shù)進(jìn)行初始化。

class Date(object):
    day = 0
    month = 0
    year = 0
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year

但是如果我們有很多 ('dd-mm-yyyy') 格式字符串的日期信息,想要把它們創(chuàng)建成 Date 類實例。

此時我們需要將 ('dd-mm-yyyy')轉(zhuǎn)化成三個整形變量

然后 通過傳遞這些值實例化 Date。

我們當(dāng)然可以在函數(shù)外面做轉(zhuǎn)化的事,然后去實例化

如下:

day, month, year = map(date_as_string.split('-'))
date1 = Date(day, month, year)

但是很明顯轉(zhuǎn)化這個功能放在類里面美觀一點,但是一般的方法需要類實例化之后(調(diào)用了__init__之后)才可以使用,因此這里需要使用@classmethod

class Date(object):
    day = 0
    month = 0
    year = 0
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(date_as_string.split('-'))
        date1 = cls(day, month, year)
        return date1
date2 = Date.from_string('11-09-2012')

通過date2 = Date.from_string('11-09-2012')這樣的方式就可以生成一個實例了。

2.某些不與實例交互的方法

不與實例交互就可以完成功能的方法雖然可以通過普通的實例化方法實現(xiàn)

但是實例化之后會浪費更多的時間與空間。

因此使用staticmethod。

ps:staticmethod方法和一個定義在lei外面的函數(shù)沒啥區(qū)別,為了美觀和整潔才移到函數(shù)里面的。

到此這篇關(guān)于Python中類方法@classmethod和靜態(tài)方法@staticmethod解析的文章就介紹到這了,更多相關(guān)Python類方法和靜態(tài)方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python打開網(wǎng)頁和暫停實例

    python打開網(wǎng)頁和暫停實例

    這篇文章主要介紹了python打開網(wǎng)頁和暫停實例,涉及webbrowser模塊與os模塊的使用,是非常具有實用價值的一個技巧,需要的朋友可以參考下
    2014-09-09
  • 解決python中使用PYQT時中文亂碼問題

    解決python中使用PYQT時中文亂碼問題

    今天小編就為大家分享一篇解決python中使用PYQT時中文亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python中導(dǎo)入 train_test_split提示錯誤的解決

    python中導(dǎo)入 train_test_split提示錯誤的解決

    這篇文章主要介紹了python中導(dǎo)入 train_test_split提示錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 使用python切片實現(xiàn)二維數(shù)組復(fù)制示例

    使用python切片實現(xiàn)二維數(shù)組復(fù)制示例

    今天小編就為大家分享一篇使用python切片實現(xiàn)二維數(shù)組復(fù)制示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python中如何將Tqdm與Asyncio結(jié)合使用呢

    Python中如何將Tqdm與Asyncio結(jié)合使用呢

    這篇文章主要和大家詳細(xì)介紹了在Python中如何將Tqdm與Asyncio結(jié)合使用呢,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • Django框架用戶注銷功能實現(xiàn)方法分析

    Django框架用戶注銷功能實現(xiàn)方法分析

    這篇文章主要介紹了Django框架用戶注銷功能實現(xiàn)方法,結(jié)合實例形式分析了基于Django框架的刪除cookie實現(xiàn)用戶注銷功能的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • 分分鐘入門python語言

    分分鐘入門python語言

    分分鐘學(xué)會一門語言之Python篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python處理HTTP認(rèn)證的常見方法

    Python處理HTTP認(rèn)證的常見方法

    在Python中,HTTP認(rèn)證通常指的是客戶端在向服務(wù)器發(fā)送請求時,需要提供某種形式的認(rèn)證信息,處理HTTP認(rèn)證通常涉及到使用requests庫,requests庫提供了簡單的方式來處理需要認(rèn)證的HTTP請求,本文給大家介紹了Python處理HTTP認(rèn)證的常見方法
    2025-03-03
  • Python語言描述最大連續(xù)子序列和

    Python語言描述最大連續(xù)子序列和

    這篇文章主要介紹了Python語言描述最大連續(xù)子序列和,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • Python實現(xiàn)王者榮耀自動刷金幣的完整步驟

    Python實現(xiàn)王者榮耀自動刷金幣的完整步驟

    這篇文章主要介紹了Python實現(xiàn)王者農(nóng)藥自動刷金幣的完整步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論

潼南县| 荔浦县| 九江市| 离岛区| 凤山市| 申扎县| 商城县| 沙田区| 武冈市| 南充市| 甘泉县| 岳阳市| 麻江县| 大邑县| 车险| 柳州市| 璧山县| 惠水县| 贺州市| 江北区| 醴陵市| 达孜县| 石泉县| 广元市| 瑞昌市| 泾源县| 武穴市| 靖安县| 宜城市| 高邑县| 盱眙县| 双辽市| 白银市| 桃源县| 九龙县| 三河市| 湄潭县| 西盟| 石景山区| 九江县| 城市|