With the following code :
import types
class Foo():
def __getitem__(self, x):
return x
def new_get(self, x):
return x + 1
x = Foo()
x.__getitem__ = types.MethodType(new_get, x)
x.__getitem__(42)
will return 43, but x[42]
will return 42.
Is there a way to override __getitem__
at instance level in Python?
This is unfortunately, and quite surprisingly, not allowed:
For custom classes, implicit invocations of special methods are only guaranteed to work correctly if defined on an object’s type, not in the object’s instance dictionary.
Source: https://docs.python.org/3/reference/datamodel.html#special-lookup