Как написать статический метод getitem для Python? - PullRequest
12 голосов
/ 31 мая 2011

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

class A:
    @staticmethod
    def __getitem__(val):
        return "It works"

print A[0]

Обратите внимание, что я вызываю метод __getitem__ для типа A.

1 Ответ

24 голосов
/ 31 мая 2011

Когда объект индексируется, специальный метод __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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...