最新国产好看的视频,伊人天堂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參數,與類的實例綁定。

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

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

2.類方法class_foo()

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

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

可以直接用A.class_foo()來調用,當然也可以直接實例化,通過實例來調用。

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

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

該方法內部不能訪問類或者實例的屬性,相當于定義在類外面的普通方法。

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

二、@classmethod和@staticmethod的異同

相同點:

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

不同點:

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

三、使用場景

1.classmethod用在構造前交互(即類實例化之前),一般是用來實現特殊的構造函數。

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

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')轉化成三個整形變量

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

我們當然可以在函數外面做轉化的事,然后去實例化

如下:

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

但是很明顯轉化這個功能放在類里面美觀一點,但是一般的方法需要類實例化之后(調用了__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.某些不與實例交互的方法

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

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

因此使用staticmethod。

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

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

相關文章

  • python打開網頁和暫停實例

    python打開網頁和暫停實例

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

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

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

    python中導入 train_test_split提示錯誤的解決

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

    使用python切片實現二維數組復制示例

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

    Python中如何將Tqdm與Asyncio結合使用呢

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

    Django框架用戶注銷功能實現方法分析

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

    分分鐘入門python語言

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

    Python處理HTTP認證的常見方法

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

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

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

    Python實現王者榮耀自動刷金幣的完整步驟

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

最新評論

南岸区| 任丘市| 龙川县| 湟源县| 平原县| 阆中市| 五大连池市| 珲春市| 保康县| 和平县| 上杭县| 富锦市| 克什克腾旗| 达孜县| 华亭县| 化隆| 拜泉县| 夏津县| 沁水县| 垣曲县| 邯郸市| 霍州市| 汉沽区| 涟源市| 资兴市| 上饶市| 林甸县| 调兵山市| 潞西市| 宁明县| 皮山县| 洛扎县| 那坡县| 贡山| 萨迦县| 阿鲁科尔沁旗| 乐业县| 灵台县| 北宁市| 德兴市| 石首市|