Contents

Python decorator

@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'