Python中的類方法與靜態方法


Python中的類方法是一種繫結到類而不是類物件的方法。靜態方法也類似,但它們之間存在一些基本差異。對於類方法,我們需要指定`@classmethod`裝飾器;對於靜態方法,則使用`@staticmethod`裝飾器。

類方法語法。

class my_class:
   @classmethod
  deffunction_name(cls, arguments):
      #Function Body
      return value

靜態方法語法。

class my_class:
   @staticmethod
   deffunction_name(arguments):
      #Function Body
      return value

類方法和靜態方法之間有什麼區別?

類方法 靜態方法
類方法以`cls`(類)作為第一個引數。 靜態方法不接受任何特定引數。
類方法可以訪問和修改類狀態。 靜態方法不能訪問或修改類狀態。
類方法將類作為引數來了解該類的狀態。 靜態方法不知道類狀態。這些方法用於透過一些引數執行一些實用程式任務。
此處使用`@classmethod`裝飾器。 此處使用`@staticmethod`裝飾器。

靜態方法用於執行一些實用程式任務,而類方法用於工廠方法。工廠方法可以為不同的用例返回類物件。

示例程式碼

from datetime import date as dt
class Employee:
   def __init__(self, name, age):
      self.name = name
      self.age = age
   @staticmethod
   defisAdult(age):
      if age > 18:
         return True
      else:
         return False
   @classmethod
   defemp_from_year(emp_class, name, year):
      return emp_class(name, dt.today().year - year)
   def __str__(self):
      return 'Employee Name: {} and Age: {}'.format(self.name, self.age)
e1 = Employee('Dhiman', 25)
print(e1)
e2 = Employee.emp_from_year('Subhas', 1987)
print(e2)
print(Employee.isAdult(25))
print(Employee.isAdult(16))

輸出

Employee Name: Dhiman and Age: 25
Employee Name: Subhas and Age: 31
True
False

更新於:2019年7月30日

19K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.