比方說,一個人想項目分配從國外庫添加到一個類的實例:Python的補丁項目分配
# defined outside our code base
class WeDoNotWantToDeriveThis(object): pass
inst = WeDoNotWantToDeriveThis()
def set_item_func(self, idx, val): print("hi there")
import types
# try to patch item setter
inst.__setitem__ = types.MethodType(set_item_func, inst)
assert hasattr(inst, '__setitem__')
print(type(inst.__setitem__)) # prints "instancemethod"
# try to perform item assignment on inst
inst[0] = None # raises 'object does not support item assignment'
的問題是如何正確地做到這一點。也許'setitem'沒有在實例上查找,但在類本身上檢查對象是否支持項目分配?
根據該文件,執行setitem方法應該是足夠了: https://docs.python.org/3/reference/datamodel.html#object.setitem
儘量實現'__getitem__'代替。 –
爲什麼不是子類而不是猴子修補? – jonrsharpe
因爲這將需要太多的代碼更改。它現在應該是一個簡單的解決方法。 – marscher