天天看點

python之 @staticmethod

class VectorOp(object):
    """
    實作向量計算操作
    """
    @staticmethod  # 不強制要求參數,
    def dot(x, y):
           

直接上代碼呢,我們閱讀代碼時,有時候會出現  @staticmethod ,那有什麼用呢。當我們調用一個類的時候,我們必須初始化一個類,才能調用裡面的方法。這樣會很麻煩。

  @staticmethod的優勢:在不初始化一個對象的前提下,就可以調用其方法。

我們看下面的兩個例子:

eg1.py

class Mathematics:
    @staticmethod 
    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)

eg2.py

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

重點是: 我們什麼時候可以用@staticmethod:

  第一:Grouping utility function to a class

  第二:Having a single implementation

轉載:https://www.programiz.com/python-programming/methods/built-in/staticmethod