使用 __get__ 向已有類例項注入函式

倒地發表於2024-05-03

突然有這樣的特殊需求:向已經例項化的類物件新增新方法。例如,我的 model 本沒有實現 predict_step 方法,現在我想向 model 注入這個函式:

def predict_step(self, batch, batch_idx, dataloader_idx=0):
    logits = self(**batch)["logits"]
    pred = F.softmax(logits, dim=-1)
    return pred

既然 Python 是萬物皆物件,那這個需求應當能實現。

還真別說:

model.predict_step = predict_step.__get__(model)

這樣 model 就擁有 predict_step 方法了。沒有深究原理,很是神奇。

相關文章