.jpeg)
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