class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
Обратите внимание, что я вызываю метод __getitem__ для типа A.
Ответ 1
Когда объект индексируется, специальный метод __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