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

python中@staticmethod方法的使用

 更新時間:2023年09月19日 09:56:38   作者:elie813  
這篇文章主要介紹了python中@staticmethod方法的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

python @staticmethod方法

python中@staticmethod方法,類似于C++中的static,方便將外部函數(shù)集成到類體中,主要是可以在不實例化類的情況下直接訪問該方法,如果你去掉staticmethod,在方法中加self也可以通過實例化訪問方法也是可以集成。

class Test:
      def __init__(self,num):
            self.num = num;
      def cout_num(self):
            print(self.num)
      @staticmethod
      def print_num():
            print("Hello World")         
if __name__ == "__main__":
      obj = Test(10)
      """實例化成員方法"""
      obj.cout_num()
      """直接訪問靜態(tài)方法"""
      Test.print_num()
      """實例化 訪問靜態(tài)方法"""
      obj.print_num()

輸出結(jié)果

10
Hello World
Hello World

@staticmethod和@classmethod的區(qū)別

一個比較簡單粗暴的區(qū)分方式

要決定是使用@staticmethod還是@classmethod,你必須看看類方法內(nèi)部。如果你的方法訪問了類中的其他變量/方法,那么就使用@classmethod。

另一方面,如果方法沒有接觸到類中的任何其他變量,那么就使用@staticmethod。

其設(shè)計有更深的邏輯聯(lián)系:

  • classmethod:主要用于替代構(gòu)造函數(shù)。
  • staticmethod:不使用對象的狀態(tài),甚至不使用類本身的結(jié)構(gòu)。它可以是一個類外部的函數(shù)。它只放在類的內(nèi)部,用于分組具有類似功能的函數(shù)(例如,像Java的數(shù)學(xué)類靜態(tài)方法)

示例代碼:

@classmethod 
Person.printAge = classmethod(Person.printAge)
@staticmethod 
Calculator.add_numbers = staticmethod(Calculator.add_numbers)

能看懂這兩行代碼,應(yīng)該就能理解什么是靜態(tài)方法,什么是類方法了吧。

當(dāng)然,看的不太懂也沒有關(guān)系,下面通過栗子來詳細(xì)的解說一下。

類方法@classmethod

什么是類方法?

類方法是綁定到類而不是其對象的方法。

它不需要創(chuàng)建類實例,就像staticmethod 一樣。

靜態(tài)方法 @staticmethod

一般來說,要使用某個類的方法,需要先實例化一個對象再調(diào)用方法。

而使用@staticmethod或@classmethod,就可以不需要實例化,直接類名.方法名()來調(diào)用。

python staticmethod 返回函數(shù)的靜態(tài)方法。

該方法不強制要求傳遞參數(shù),

聲明一個靜態(tài)方法:

class C(object):
    @staticmethod
    def f(arg1, arg2, ...):
        ...

可以不實例化調(diào)用該方法 C.f()

實現(xiàn)實例化使用 C().f()

什么時候使用@staticmethod

當(dāng)某個方法(函數(shù))不需要用到對象中的任何資源,將這個方法改為一個靜態(tài)方法,

加上@staticmethod;

這個函數(shù)的形參不需要添加 self

加上之后, 這個方法就和普通的函數(shù)沒有什么區(qū)別了, 只不過寫在了一個類中, 可以使用這個類的對象調(diào)用,也可以使用類直接調(diào)用。

區(qū)別

靜態(tài)方法和類方法之間的區(qū)別在于:

靜態(tài)方法對類一無所知,只處理參數(shù)。

類方法適用于類,因為它的參數(shù)始終是類本身。

類方法可以由類及其對象調(diào)用。

Class.classmethod()
Class().classmethod()

但無論如何,class方法始終附加到一個類,其中第一個參數(shù)作為類本身,cls。

def classMethod(cls, args…)

五、例子

class Person:
    age = 25
    def printAge(cls):
        print('The age is:', cls.age)
Person.printAge = classmethod(Person.printAge)
Person.printAge()
class Person:
    age = 25
    @classmethod
    def printAge(cls):
        print('The age is:', cls.age)
Person.printAge()

注意:

你會發(fā)現(xiàn)改變了代碼,但是結(jié)果還是一樣的。你細(xì)心就會有所發(fā)現(xiàn),沒錯,代碼中的:

****

@classmethod 等價于 Person.printAge = classmethod(Person.printAge)

實例方法可以調(diào)用實例方法、類方法、靜態(tài)方法。

類對象只能調(diào)用類方法、靜態(tài)方法。

classmethod與staticmethod用法類似,classmethod可以通過staticmethod代替,在通過類調(diào)用時,這兩者對于調(diào)用者來說是不可區(qū)分的。這兩者的區(qū)別在于,classmethod增加了一個對實際調(diào)用類的引用。

1.方法可以判斷出自己是通過基類被調(diào)用,還是通過某個子類被調(diào)用

2.通過子類調(diào)用時,方法可以返回子類的實例而非基類的實例

3.通過子類調(diào)用時,方法可以調(diào)用子類的其他classmethod

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python如何實現(xiàn)macOS系統(tǒng)代理的設(shè)置

    Python如何實現(xiàn)macOS系統(tǒng)代理的設(shè)置

    這篇文章主要為大家詳細(xì)介紹了Python如何實現(xiàn)macOS系統(tǒng)代理的設(shè)置,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • 如何利用python繪制等高線圖

    如何利用python繪制等高線圖

    這篇文章主要介紹了如何利用python繪制等高線圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • 如何運行帶參數(shù)的python腳本

    如何運行帶參數(shù)的python腳本

    這篇文章主要介紹了如何運行帶參數(shù)的python腳本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 利用Python腳本實現(xiàn)ping百度和google的方法

    利用Python腳本實現(xiàn)ping百度和google的方法

    最近在做SEO的時候,為了讓發(fā)的外鏈能夠快速的收錄,想到了利用ping的功能,google和百度都有相關(guān)的ping介紹,有興趣的朋友可以去看看相關(guān)的知識。下面這篇文章主要介紹了利用Python腳本實現(xiàn)ping百度和google的方法,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • python使用epoll實現(xiàn)服務(wù)端的方法

    python使用epoll實現(xiàn)服務(wù)端的方法

    今天小編就為大家分享一篇python使用epoll實現(xiàn)服務(wù)端的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python面向?qū)ο蟪绦蛟O(shè)計OOP入門教程【類,實例,繼承,重載等】

    Python面向?qū)ο蟪绦蛟O(shè)計OOP入門教程【類,實例,繼承,重載等】

    這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計OOP入門教程,較為詳細(xì)的分析了Python面向?qū)ο箢?實例,繼承,重載等相關(guān)概念與使用技巧,需要的朋友可以參考下
    2019-01-01
  • Python的經(jīng)緯度與xy坐標(biāo)系相互轉(zhuǎn)換方式

    Python的經(jīng)緯度與xy坐標(biāo)系相互轉(zhuǎn)換方式

    這篇文章主要介紹了Python的經(jīng)緯度與xy坐標(biāo)系相互轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 基于Python實現(xiàn)射擊小游戲的制作

    基于Python實現(xiàn)射擊小游戲的制作

    這篇文章主要介紹了如何利用Python制作一個自己專屬的第一人稱射擊小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-04-04
  • Python一行代碼識別車牌號碼實現(xiàn)示例詳解

    Python一行代碼識別車牌號碼實現(xiàn)示例詳解

    這篇文章主要為大家介紹了Python一行代碼識別車牌號碼實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗

    Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗

    這篇文章主要介紹了Python實戰(zhàn)之能監(jiān)控文件變化的神器—看門狗,文中有非常詳細(xì)的圖文及代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05

最新評論