關於 python 的 decorator 的一般使用方式已經相當熟悉,但有時需要一種模式是希望新增的類別(稱為 Tool
)是向某個類別(稱為 A
)註冊,讓 A
是能夠直接找到 Tool
,如果用繼承的方式也不太適合,因此考慮用一個類別在別的類別上的 decorator。
有時也需要繼承的類別可以在格式或是參數上,使用通用的規則來呈現或檢查等等,因此考慮用父類別在子類別 method 上的 decorator
根據上面的程式,一個類別在別的類別上的 decorator,與一般的 decorator 差不多,最外層的參數是取得 decorator 的參數,內部包的另一層 function 所取得的參數就是需要拿到的類別
一旦執行程式,在 python 找到 ToolForA
的定義後就會第一步傳入 decorator 的參數,然後取得類別 ToolForA
根據上面的程式,父類別在子類別 method 上的 decorator,在傳入參數的部分並沒有太大差異,但需要包住兩層 function(wrap 與 wrap2),wrap 取得需要拿到的子類別 method,而 wrap2 才是進一步取得外部向子類別 method 傳入的參數
以上是使用 decorator 上的一些自己需要的特殊需求