Lunski's Clutter

This is a place to put my clutters, no matter you like it or not, welcome here.

0%

Python Decorator

Python進階用法

使用@staticmethod (靜態方法)不須先建立實例

  • 不需要 self
  • 不能訪問實例屬性或類別屬性
  • 不需要實例,通過類別名稱直接調用
  • 本質上是一個普通函數,只是放在類別裡面
  • 與類別沒有實質關聯,只是邏輯上歸屬於該類別
1
2
3
4
class MyClass:
@staticmethod
def static_method(param1, param2): # 不用寫self
return param1 + param2

使用方式

1
result = MyClass.static_method(1, 2)  # 不需要實例

若不加@staticmethod需要先建立實例

1
2
obj = MyClass() 
result = obj.normal_method(1, 2) # 通過實例調用

@classmethod (類別方法)

  • 第一個參數必須是 self(或cls代表類別本身)
  • 可以訪問類別屬性
  • 有繼承,覆寫父類別規則
  • 可以通過類別名稱或實例調用
  • 常用於替代建構函數或工廠方法
  • 既不需要實例,又能訪問類別屬性
1
2
3
4
5
6
7
class MyValidator:
VALIDATION_RULES = {"max_length": 50}

@classmethod
def validate_data(self, data):
# 可以訪問 self.VALIDATION_RULES
return len(data) <= self.VALIDATION_RULES["max_length"]

使用方式

1
result = MyValidator.validate_data("hello world")  # True

若不加@classmethod需要先建立實例

1
2
validator = MyValidator()  # 必須先建立實例
result = validator.validate_data("hello world") # True

通過 self.class 或直接使用類別名稱訪問

1
2
return len(data) <= self.__class__.VALIDATION_RULES["max_length"]
return len(data) <= MyValidator.VALIDATION_RULES["max_length"]

如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)

Welcome to my other publishing channels