亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python靜態(tài)方法和類方法的區(qū)別實(shí)例解析

 更新時(shí)間:2025年09月08日 15:12:10   作者:Lumiron  
本文給大家介紹python靜態(tài)方法和類方法的區(qū)別,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

類方法 (Class Method)

1、定義:使用裝飾器 @classmethod 修飾。第一個(gè)參數(shù)必須是 cls,它指向類本身(不是實(shí)例),而不是 self。
2、可以通過(guò)類名直接調(diào)用,也可以通過(guò)實(shí)例調(diào)用(但更推薦用類名調(diào)用,以明確意圖)。無(wú)論通過(guò)哪種方式調(diào)用,cls 參數(shù)都會(huì)自動(dòng)傳入為類本身。
3、權(quán)限:不能訪問(wèn)或修改特定的實(shí)例屬性(因?yàn)樗鼪](méi)有 self),但可以訪問(wèn)和修改類的屬性(通過(guò) cls.attr)。
4、用途:
工廠方法 (Factory Method):作為一種替代構(gòu)造函數(shù)的創(chuàng)建實(shí)例的方式,可以提供更清晰的語(yǔ)義(例如,根據(jù)不同的參數(shù)格式創(chuàng)建對(duì)象)。
操作類級(jí)狀態(tài):當(dāng)方法需要修改或讀取所有實(shí)例共享的類變量時(shí)。
在繼承中,cls 會(huì)指向調(diào)用它的子類,這使得類方法在繼承體系中非常有用。
工廠方法代碼:

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients
    def __repr__(self):
        return f'Pizza({self.ingredients})'
    @classmethod
    def margherita(cls):
        # `cls` 在這里是 Pizza 類,我們可以調(diào)用它來(lái)創(chuàng)建實(shí)例
        return cls(['mozzarella', 'tomatoes'])
    @classmethod
    def prosciutto(cls):
        return cls(['mozzarella', 'tomatoes', 'ham'])
# 不需要記住配料,直接使用類提供的工廠方法創(chuàng)建特定口味的披薩
pizza1 = Pizza.margherita() # 通過(guò)類調(diào)用
pizza2 = Pizza.prosciutto()
print(pizza1) # Pizza(['mozzarella', 'tomatoes'])
print(pizza2) # Pizza(['mozzarella', 'tomatoes', 'ham'])
# 也可以通過(guò)實(shí)例調(diào)用(不推薦,容易讓人困惑)
obj = Pizza(['cheese'])
pizza3 = obj.margherita()
print(pizza3) # 同樣創(chuàng)建了一個(gè)新的 Pizza 對(duì)象

靜態(tài)方法 (Static Method)

1、定義:使用裝飾器 @staticmethod 修飾。它沒(méi)有強(qiáng)制性的第一個(gè)參數(shù)(既沒(méi)有 self,也沒(méi)有 cls)。
2、調(diào)用:可以通過(guò)類名直接調(diào)用,也可以通過(guò)實(shí)例調(diào)用。
3、權(quán)限:不能訪問(wèn) self 或 cls。因此,它既不能修改實(shí)例狀態(tài),也不能修改類狀態(tài)。它就像一個(gè)定義在類命名空間里的普通函數(shù)。
4、用途:
工具函數(shù):當(dāng)一個(gè)函數(shù)在邏輯上屬于某個(gè)類,但又不需要訪問(wèn)類或?qū)嵗娜魏螖?shù)據(jù)時(shí)。將它放在類內(nèi)部,而不是作為模塊級(jí)的函數(shù),可以更好地組織代碼,表明它與該類在功能上是相關(guān)的。

命名空間管理:將相關(guān)的功能分組到類下面。
工具函數(shù)的代碼:

class Calculator:
    @staticmethod
    def add(x, y):
        return x + y
    @staticmethod
    def multiply(x, y):
        return x * y
# 不需要?jiǎng)?chuàng)建 Calculator 實(shí)例,直接通過(guò)類名調(diào)用
result1 = Calculator.add(5, 3)
result2 = Calculator.multiply(2, 4)
print(result1) # 8
print(result2) # 8
# 也可以通過(guò)實(shí)例調(diào)用(同樣不推薦)
calc_obj = Calculator()
result3 = calc_obj.add(1, 2)
print(result3) # 3

實(shí)例方法、類方法和靜態(tài)方法的區(qū)別

特性實(shí)例方法類方法 (@classmethod)靜態(tài)方法 (@staticmethod)
裝飾器無(wú)@classmethod@staticmethod
第一個(gè)參數(shù)self (實(shí)例對(duì)象)cls (類對(duì)象)無(wú)強(qiáng)制參數(shù)
訪問(wèn)實(shí)例屬性是 (通過(guò) self)
訪問(wèn)類屬性是 (通過(guò) self.class 或類名)是 (通過(guò) cls)
修改實(shí)例狀態(tài)
修改類狀態(tài)
主要用途操作或讀取實(shí)例數(shù)據(jù)作為工廠方法、操作類級(jí)狀態(tài)工具函數(shù)、命名空間組織
調(diào)用方式必須通過(guò)實(shí)例推薦通過(guò)類,也可通過(guò)實(shí)例推薦通過(guò)類,也可通過(guò)實(shí)例

如何選擇方法?

1、需要訪問(wèn)或修改實(shí)例數(shù)據(jù)嗎?

是 -> 使用 實(shí)例方法。

2、不需要訪問(wèn)實(shí)例數(shù)據(jù),但需要訪問(wèn)或修改類數(shù)據(jù)(類屬性),或者需要作為工廠創(chuàng)建實(shí)例嗎?

是 -> 使用 類方法。

3、既不需要訪問(wèn)實(shí)例數(shù)據(jù),也不需要訪問(wèn)類數(shù)據(jù)嗎?

是 -> 使用 靜態(tài)方法。

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

相關(guān)文章

  • Django?事務(wù)回滾的具體實(shí)現(xiàn)

    Django?事務(wù)回滾的具體實(shí)現(xiàn)

    本文主要介紹了Django?事務(wù)回滾的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python中的異步:async?和?await以及操作中的事件循環(huán)、回調(diào)和異常

    Python中的異步:async?和?await以及操作中的事件循環(huán)、回調(diào)和異常

    在現(xiàn)代編程中,異步操作在處理?I/O?密集型任務(wù)時(shí),可以顯著提高程序的性能和響應(yīng)速度,Python?提供了?async?和?await?關(guān)鍵字,使得編寫(xiě)異步代碼變得更加直觀和簡(jiǎn)潔,在這篇文章中,我們將深入探討?Python?的異步操作,并通過(guò)實(shí)際代碼示例來(lái)說(shuō)明其使用方法
    2024-12-12
  • Python實(shí)現(xiàn)JSON反序列化類對(duì)象的示例

    Python實(shí)現(xiàn)JSON反序列化類對(duì)象的示例

    本篇文章主要介紹了Python實(shí)現(xiàn)JSON反序列化類對(duì)象的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • python實(shí)現(xiàn)按長(zhǎng)寬比縮放圖片

    python實(shí)現(xiàn)按長(zhǎng)寬比縮放圖片

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)按長(zhǎng)寬比縮放圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 使用Python腳本提取基因組指定位置序列

    使用Python腳本提取基因組指定位置序列

    這篇文章主要為大家介紹了使用Python腳本提取基因組指定位置序列的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • python有幾個(gè)版本

    python有幾個(gè)版本

    在本篇內(nèi)容里小編給大家分享的是關(guān)于python版本的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • flask框架jinja2模板與模板繼承實(shí)例分析

    flask框架jinja2模板與模板繼承實(shí)例分析

    這篇文章主要介紹了flask框架jinja2模板與模板繼承,結(jié)合實(shí)例形式分析了flask框架jinja2模板的基本用法與模板繼承相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-08-08
  • 淺談對(duì)python中if、elif、else的誤解

    淺談對(duì)python中if、elif、else的誤解

    這篇文章主要介紹了淺談對(duì)python中if、elif、else的誤解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python高并發(fā)解決方案實(shí)現(xiàn)過(guò)程詳解

    Python高并發(fā)解決方案實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了Python高并發(fā)解決方案實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Pandas DataFrame replace替換后無(wú)效的解決

    Pandas DataFrame replace替換后無(wú)效的解決

    這篇文章主要介紹了Pandas DataFrame replace替換后無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論