Как написать статический метод getitem python?

Что мне нужно изменить, чтобы сделать эту работу?

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

В Python3 метакласс задается следующим образом:

class A(object, metaclass=MetaA):
    pass