python中@staticmethod和@classmethod用法和解釋


先來解釋一下staticmethod和classmethod。直接一點來說,我們知道對於一個普通的類,我們要使用其中的函數的話,需要對類進行實例化,而一個類中,某個函數前面加上了staticmethod或者classmethod的話,那么這個函數就可以不通過實例化直接調用,什么意思呢?就是說有時候,我們需要把一些具有特定功能的函數放到一起,做成包導入Python程序,最好就是把他們放到一個類中,但是一個類每次我都要去實例化他,我覺得很麻煩,於是我在函數前面加上了@staticmethod,@classmethod,那么我下次用這個函數的功能的時候,可以直接用 類名.函數名 的形式了,這樣是不是省心多了?

 

  • @staticmethod將函數轉換成為一個靜態方法,@classmethod將函數轉換成為一個類方法。
  • @staticmethod不需要表示自身對象的self和自身類的cls參數,就跟使用函數一樣。
  • @classmethod也不需要self參數,但第一個參數需要是表示自身類的cls參數。
  • 如果在@staticmethod中要調用到這個類的一些屬性方法,只能直接類名.屬性名或類名.方法名。
  • @classmethod因為持有cls參數,可以來調用類的屬性,類的方法,實例化對象等,避免硬編碼。
  實例方法 類方法(classmethod) 靜態方法(staticmethod)
定義方式 self作為第一個參數 cls作為第一個參數 無強制參數
綁定對象 類的實例
調用方式 只能通過類的實例調用 類對象或者類的實例均可調用 類對象或者類的實例均可調用

 

 

 

 

 

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2019-04-04 12:46:46
# @Author  : Your Name (you@example.org)
# @Link    : http://example.org
# @Version : $Id$


class Test:

    def __init__(self, u):
        self.u = u
        print("類的初始化方法")

    def fun1(a, c):
        print("fun1: I' am instancemethod {}".format(c))

    @staticmethod
    def fun2():
        print("fun2: I' am staticmethod")
        Test("fdsf").fun1("call1")

    @classmethod
    def fun3(cls):
        print("fun3: I'am classmethod")
        cls("ooo").fun1("這樣調用")


Test("a").fun1("I' am args")
Test.fun2()
Test.fun3()

 參考:https://blog.csdn.net/ibelieve8013/article/details/83037996


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM