Когда объект индексируется, специальный метод __getitem__
ищется первым в классе объекта. Сам класс является объектом, а класс класса обычно type
. Таким образом, чтобы переопределить __getitem__
для класса, вы можете переопределить его метакласс (чтобы сделать его подклассом type
):
class MetaA(type):
def __getitem__(cls,val):
return "It works"
class A(object):
__metaclass__=MetaA
pass
print(A[0])
# It works
В Python3 метакласс указан следующим образом:
class A(object, metaclass=MetaA):
pass