當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python staticmethod()用法及代碼示例


在本教程中,我們將借助示例了解 Python staticmethod()。

staticmethod() 內置函數返回給定函數的靜態方法。

示例

class Calculator:

  def add_numbers(num1, num2):
    return num1 + num2

# convert add_numbers() to static method
Calculator.add_numbers = staticmethod(Calculator.add_numbers)

sum = Calculator.add_numbers(5, 7)
print('Sum:', sum)

# Output: Sum: 12

staticmethod() 語法

用法:

staticmethod(function)

注意staticmethod()被認為是創建靜態函數的un-Pythonic 方式。因此,在較新版本的 Python 中,您可以使用@staticmethod裝飾師。

@staticmethod 的語法是:

@staticmethod
def func(args, ...)

參數:

staticmethod() 方法采用單個參數:

  • function- 需要轉換為靜態方法的函數

staticmethod() 返回類型

staticmethod() 返回作為參數傳遞的函數的靜態方法。

什麽是靜態方法?

靜態方法,很像 class methods ,是綁定到類而不是其對象的方法。

它們不需要創建類實例。因此,它們不依賴於對象的狀態。

靜態方法和類方法的區別在於:

  • 靜態方法對類一無所知,隻處理參數。
  • 類方法適用於類,因為它的參數始終是類本身。

它們可以被類及其對象調用。

Class.staticmethodFunc()
or even
Class().staticmethodFunc()

示例 1:使用 staticmethod() 創建靜態方法

class Mathematics:

    def addNumbers(x, y):
        return x + y

# create addNumbers static method
Mathematics.addNumbers = staticmethod(Mathematics.addNumbers)

print('The sum is:', Mathematics.addNumbers(5, 10))

輸出

The sum is: 15

什麽時候使用靜態方法?

1. 將效用函數分組到一個類

靜態方法的用例有限,因為與類方法或類中的任何其他方法一樣,它們無法訪問類本身的屬性。

但是,當您需要一個不訪問類的任何屬性但對它屬於該類有意義的實用函數時,我們使用靜態函數。

示例 2:將實用程序函數創建為靜態方法

class Dates:
    def __init__(self, date):
        self.date = date
        
    def getDate(self):
        return self.date

    @staticmethod
    def toDashDate(date):
        return date.replace("/", "-")

date = Dates("15-12-2016")
dateFromDB = "15/12/2016"
dateWithDash = Dates.toDashDate(dateFromDB)

if(date.getDate() == dateWithDash):
    print("Equal")
else:
    print("Unequal")

輸出

Equal

在這裏,我們有一個 Dates 類,它隻適用於帶有破折號的日期。但是,在我們之前的數據庫中,所有日期都以斜線顯示。

為了將 slash-dates 轉換為 dash-dates,我們在 Dates 中創建了一個實用函數 toDashDate

它是一個靜態方法,因為它不需要訪問Dates 本身的任何屬性,隻需要參數。

我們也可以在類之外創建toDashDate,但由於它僅適用於日期,因此將其保留在Dates 類中是合乎邏輯的。

2. 有一個單一的實現

當我們不希望類的子類更改/覆蓋方法的特定實現時,使用靜態方法。

示例 3:繼承如何與靜態方法一起使用?

class Dates:
    def __init__(self, date):
        self.date = date
        
    def getDate(self):
        return self.date

    @staticmethod
    def toDashDate(date):
        return date.replace("/", "-")

class DatesWithSlashes(Dates):
    def getDate(self):
        return Dates.toDashDate(self.date)

date = Dates("15-12-2016")
dateFromDB = DatesWithSlashes("15/12/2016")

if(date.getDate() == dateFromDB.getDate()):
    print("Equal")
else:
    print("Unequal")

輸出

Equal

在這裏,我們不希望子類 DatesWithSlashes 覆蓋靜態實用程序方法 toDashDate,因為它隻有一次用途,即將日期更改為 dash-dates。

通過覆蓋子類中的getDate() 方法,我們可以輕鬆地使用靜態方法來發揮我們的優勢,使其與DatesWithSlashes 類一起工作。

相關用法


注:本文由純淨天空篩選整理自 Python staticmethod()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。