色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python中普通方法、靜態方法、類方法的區別

科技綠洲 ? 來源:AirPython ? 作者:AirPython ? 2023-11-02 11:03 ? 次閱讀

1. 場景

前幾天,有一個小伙伴過來問我,Python 中的 @staticmethod、@classmethod、self、cls 分別代表什么意思,自己平時光顧著用,不知道具體的含義?

事實上,由于 Python 語言的靈活性,這部分內容在日常編碼過程中,很容易被忽略掉

本篇文章將和大家一起聊聊這幾個小知識點

2.@staticmethod

裝飾器 @staticmethod 修飾的方法稱為:靜態方法,和普通的函數沒有什么區別

下面將聊聊實際項目中幾種應用場景

1、要調用一個靜態方法,一般使用形式是:「 類名.方法名() 」

class Web(object):
    @staticmethod
    def foo_staticmethod():
        """靜態方法"""
        pass


if __name__ == '__main__':
    # 直接使用類名+方法名調用
    Web.foo_staticmethod()

當然,也可以實例化一個類對象,通過這個對象去調用靜態方法,但是不建議使用這種方式

# 實例化一個對象
instance = Web()

# 使用實例對象去調用靜態方法(不建議)
instance.foo_staticmethod()

2、針對類中定義的靜態變量,可以使用「 類名.變量名 」 的形式去訪問

class Web(object):
    # 靜態變量(類變量)
    name = "Python_Web"

    @staticmethod
    def foo_staticmethod():
        """靜態方法"""
        # 引用靜態變量
        print(Web.name)

3、靜態方法內部使用其他靜態方法、類方法,同樣是使用「 類名.方法名() 」去調用

class Web(object):
    # 靜態變量(類變量)
    name = "Python_Web"

    # 類方法
    @classmethod
    def foo_classmethod_other(cls):
        print('類方法被調用!')

    # 另外一個靜態方法
    @staticmethod
    def foo_staticmethod_other():
        print('另外一個靜態方法被調用!')

    @staticmethod
    def foo_staticmethod():
        """靜態方法"""
        # 調用其他靜態方法
        print(Web.foo_staticmethod_other()) 

        # 調用類方法
        print(Web.foo_classmethod_other())

4、靜態方法內部調用普通方法,訪問實例屬性

普通方法和實例屬性都必須通過實例對象去引用,不能直接使用類名去訪問

class Web(object):
    def __init__(self):
        self.desc = "實例屬性,不共享"

    def norm_method(self):
        """普通方法"""
        print('普通方法被調用!')

    @staticmethod
    def foo_staticmethod():
        """靜態方法"""
        instance = Web()

        # 獲取實例屬性
        print(instance.desc)

        # 調用普通方法
        instance.norm_method()

5、子類的使用

在子類中調用父類定義好的靜態方法,只需要將類名替換為子類名稱即可

class Web(object):

    @staticmethod
    def foo_staticmethod(arg1, arg2):
        pass

class Django(Web):
    """子類"""
    pass

if __name__ == '__main__':
    # 1、使用類名(父類)去調用靜態方法
    Web.foo_staticmethod("Hello", ",AirPython")

    # 2、使用類名(子類)去調用靜態方法
    Django.foo_staticmethod("Hello", ",AirPython")

3.@classmethod

裝飾器 @classmethod 修飾的方法稱為:類方法,在使用的時候,會將類本身作為第一個參數 cls 傳遞給類方法

# 類方法,第一個參數為cls,代表類本身
@classmethod
def foo_classmethod(cls):
    pass

其中,cls 代表外層類本身,可以實例化,也可以直接調用靜態方法、類方法、靜態變量

下面逐一進行說明

1、要調用一個類方法,一般使用形式是:「 類名.方法名() 」

class Web(object):

    # 類方法,第一個參數為cls,代表類本身
    @classmethod
    def foo_classmethod(cls):
        pass

if __name__ == '__main__':
    # 使用類名去調用類方法
    Web.foo_classmethod()

和靜態方法類似,也可以實例化一個類對象,通過這個對象去調用靜態方法,但是不建議使用這種方式

2、調用靜態變量

靜態方法內部引用靜態變量有兩種方式,分別是:

  • 「 類名.變量名 」
  • 「 cls.變量名 」

注意:由于 cls 代表就是外層類本身,所以這兩種方式等效

class Web(object):
    # 靜態變量(類變量)
    name = "Python_Web"

    # 類方法,第一個參數為cls,代表類本身
    @classmethod
    def foo_classmethod(cls):
        # 調用靜態變量方式一
        print(cls.name)

        # 調用靜態變量方式二
        print(Web.name)

3、類方法內部調用其他類方法、靜態方法

在一個類方法內部,可以使用「 類名.類方法名() 」、「 類名.靜態方法名() 」的形式去調用方法

class Web(object):

    # 靜態方法
    @staticmethod
    def foo_staticmethod():
        print('靜態方法被調用!')

    # 其他類方法
    @classmethod
    def foo_classmethod_other(cls):
        print('另外一個類方法被調用!')

    # 類方法,第一個參數為cls,代表類本身
    @classmethod
    def foo_classmethod(cls):
        # 調用其他類方法
        cls.foo_classmethod_other()

        # 調用靜態方法
        cls.foo_staticmethod()


if __name__ == '__main__':
    Web.foo_classmethod()

4、類方法內部調用普通方法,訪問實例屬性

需要通過 cls 變量實例化一個類對象,然后通過這個對象去調用普通方法和實例屬性

class Web(object):

    def __init__(self):
        self.desc = "實例屬性,不共享"

    def norm_method(self):
        """普通方法"""
        print('普通方法被調用!')

    # 類方法,第一個參數為cls,代表類本身
    @classmethod
    def foo_classmethod(cls):
        # 如果要調用實例屬性,必須使用cls實例化一個對象,然后再去引用
        print(cls().desc)

        # 如果要調用普通方法,必須使用cls實例化一個對象,然后再去引用
        cls().norm_method()

5、子類的使用

在子類中調用父類定義好的類方法,只需要將類名替換為子類名稱即可,代碼和靜態方法類似

4.區別

下面總結一下普通方法、靜態方法、類方法的區別

  • 普通方法:第一個參數 self 代表實例對象本身,可以使用 self 直接引用定義的實例屬性和普通方法;如果需要調用靜態方法和類方法,通過「 類名.方法名() 」調用即可
  • 靜態方法:使用「 類名.靜態變量 」引用靜態變量,利用「 類名.方法名() 」調用其他靜態方法和類方法;如果需要調用普通方法,需要先實例化一個對象,然后利用對象去調用普通方法
  • 類方法:第一個參數 cls 代表類本身(等價),通過「 cls.靜態變量 」或「 類名.靜態變量 」引用靜態變量,利用「 cls.方法名() 」或「 類名.方法名() 」去調用靜態方法和類方法;如果需要調用普通方法,需要先實例化一個對象,然后利用對象去調用普通方法
  • 靜態方法和類方法是針對類定義的,除了可以使用類名去調用,也可以使用實例對象去調用,但是不建議

5.最后

一般來說,如果方法內部涉及到實例對象屬性的操作,建議用普通方法;如果方法內部沒有操作實例屬性的操作,僅僅包含一些工具性的操作,建議使用靜態方法;而如果需要對類屬性,即靜態變量進行限制性操作,則建議使用類方法

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    940

    瀏覽量

    54814
  • 函數
    +關注

    關注

    3

    文章

    4327

    瀏覽量

    62573
  • 靜態
    +關注

    關注

    1

    文章

    29

    瀏覽量

    14542
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84628
收藏 人收藏

    評論

    相關推薦

    動態庫封裝成python模塊的方法

    之前的文章 將靜態庫封裝成 python 模塊中講解了如何將靜態庫封裝成 python 模塊,靜態庫封裝相對來說還是有點復雜,今天來介紹下動
    發表于 07-13 15:24 ?644次閱讀

    Python多重繼承使用方法

    執行父的__init__(self)方法;3. 下劃線開頭的變量或方法,會被認為是受保護的,不能直接點出來,但如果強制打出來的話也一樣能用,只是會有警告;4. 靜態
    發表于 04-19 14:41

    如何使用Python? 優勢有哪些?

    的下面有屬性和方法。可以將屬性理解為靜態的數據,將方法理解為動態的處理函數。比如,在下面的代碼定義了“學生”,其中_ _init_ _是
    發表于 07-30 18:08

    Python方法、實例方法靜態方法

    Python實例屬性和實例方法Python類屬性和方法
    發表于 11-05 06:25

    請問Python方法、實例方法靜態方法是什么?

    Python方法、實例方法靜態方法
    發表于 11-09 07:13

    傳統靜態配置方法與動態配置方法區別在哪?

    傳統靜態配置方法有什么缺點?MAC地址和IP地址的動態配置方法是什么?傳統靜態配置方法與動態配置方法
    發表于 05-27 06:51

    python靜態方法方法

    ;)小黑跳起來啦2. 方法與函數區別在前面,我們很經常提到方法和函數,為免有同學將他們混為一談,我這里總結一下他們的區別。在 Python
    發表于 03-07 16:56

    python執行函數的九種方法

    post_taskrunning pre_taskrunning taskrunning post_task方法四:使用 getattr 動態獲取執行若把所有的函數是放在,并定義成靜態
    發表于 03-29 17:43

    ASIC靜態驗證方法

    介紹了基于深亞微米 CMOS 工藝A S IC 電路設計流程靜態驗證方法。將這種驗證方法與以往的動態驗證方法進行了比較, 結果表明, 前
    發表于 06-21 15:05 ?0次下載
    ASIC<b class='flag-5'>靜態</b>驗證<b class='flag-5'>方法</b>

    python基礎教程之如何進行靜態方法方法詳細筆記說明

    本文檔的主要內容詳細介紹的是python基礎教程之如何進行靜態方法方法詳細筆記說明資料免費下載。
    發表于 01-04 17:01 ?17次下載
    <b class='flag-5'>python</b>基礎教程之如何進行<b class='flag-5'>靜態</b><b class='flag-5'>方法</b>和<b class='flag-5'>類</b><b class='flag-5'>方法</b>詳細筆記說明

    python靜態方法方法

    普通函數 舉個例子,如下這段代碼, run 普通的實例方法, eat 是靜態方法, jump
    的頭像 發表于 03-07 16:56 ?1597次閱讀

    Python的屬性和方法是什么

    編程我們用來創建對象。日常生活的汽車設計圖就是我們Python。日常生活
    的頭像 發表于 02-23 10:17 ?867次閱讀

    Python和對象詳解

    Python 是一種面向對象的編程語言,它支持和對象。是一種用戶自定義的數據類型,用于定義對象的屬性和方法。對象是的實例,它包含
    的頭像 發表于 04-20 16:53 ?1127次閱讀

    java抽象可以有普通方法

    Java的抽象可以有普通方法,但它也可以有抽象方法。抽象是一種中間狀態,介于
    的頭像 發表于 11-21 10:22 ?1556次閱讀

    this可以出現在方法

    用 this 關鍵字時,編譯器會發出錯誤提示,因為方法靜態方法,沒有與它們關聯的特定對象實例。然而,在特定情況下,我們可以使用 this 關鍵字在
    的頭像 發表于 11-28 16:24 ?1468次閱讀
    主站蜘蛛池模板: 国产成人在线视频播放| 狠狠狠色丁香婷婷综合久久| 亚洲综合网国产精品一区| 色狐直播免费观看| 美美哒高清在线播放8| 精品免费视在线视频观看| 国产精品禁18久久久夂久| music radio在线收听| 2022久久精品国产色蜜蜜麻豆| 亚洲AV一宅男色影视| 秋霞伦理手机在线看片| 欧美性猛交xxxxxxxx软件| 欧美嫩freexxxhddvd| 蜜桃人妻无码AV天堂三区| 久久电影精品久久99久久| 久久精品综合电影| 麻豆AV蜜桃AV久久| 青柠在线电影高清免费观看| 日本美女搞基视频| 偷上邻居熟睡少妇| 亚洲性夜夜夜色综合网| 中国午夜伦理片| 抽插妇女疯狂视频| 国产精品免费一区二区三区视频| 果冻传媒2021一二三区| 久久蜜视频| 色婷婷亚洲五月| 亚洲中文字幕手机版| 99在线国产视频| 韩国无遮羞禁动漫在线观看96 | 国产超碰AV人人做人人爽| 国产欧美二区综合| 欧美午夜特黄AAAAAA片| 亚洲福利网站| 抽插的日日液液H| 麻豆影视在线直播观看免费| 亚洲白色白色在线播放| 799是什么意思网络用语| 国产精品悠悠久久人妻精品| 美女扒开腿让男生桶免费看动态图| 色老汉网址导航|