Допустит, один хочет добавить назначения элемента к экземпляру класса из внешней библиотеки: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