Python decorator
Contents
@StaticMethods:
- 不用傳入 self 參數
- @StaticMethods 使用時機:
- 不在需要將 class 實例後才能使用,直接呼叫 Score_StaticMethods() 即可使用
class Score_StaticMethods:
def __init__(self):
pass
def math(self, math_score):
print('Math score:', math_score)
@staticmethod
def read(read_score):
print('Read score:', read_score)
x = Score_StaticMethods()
x.math(60)
Score_StaticMethods.read(100)
>>> Math srore: 60
>>> Read score: 100
@ClassMethods :
- 必須傳入 class 本身,通常會命名為 cls
- 如果要引入 class 其他函式,可以使用 cls().math(60)
- @ClassMethods 使用時機:
- 不在需要將 class 實例後才能使用函式,直接像以下範例呼叫 Score_ClassMethods.read() 即可使用
- 不同於 StaticMethods,因引入了 cls 參數,可以利用 cls 來使用其他 class 內的函式
class Score_ClassMethods:
def __init__(self):
pass
def math(self, math_score):
print('Math score:', math_score)
@classmethod
def read(read_score):
print('Read score:', read_score)
cls().math(60)
Score_ClassMethods.math(100)
>>> Math srore: 60
>>> Read score: 100
@AbstractMethods:
- 抽象類 (Employee) 的特點是不能實例化,只能被子類繼承
- 父類尚未實作該 function,子類實做需實作,不然會報錯
import abc
class Score(abc.ABC):
@abc.abstractmethod
def math(self):
return NotImplemented
class A(Score):
def math(self):
print('math')
class B(Employee):
def read(self):
print('read')
A().math()
>>> work
B().read()
>>> Traceback (most recent call last):
TypeError: Can't instantiate abstractclass Max with abstract methods work
@Property:
- @property 是要實現物件導向中設計中封裝的實現方式
- 以下是一個 @property 簡單的使用方式:
- 將 class (類) 的方法轉換為只能讀取的屬性
class Acount:
@property
def password(self):
return ‘密碼:123456'