突然有這樣的特殊需求:向已經例項化的類物件新增新方法。例如,我的 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
方法了。沒有深究原理,很是神奇。