当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。