How to make Python 2's __getitem__ work on a class?

How do I make item access ie. __getitem__available on a class object in Python 2.x?

Я пробовал:

class B:
    @classmethod
    def __getitem__(cls, key):
        raise IndexError

тестовое задание:

B[0]
# TypeError: 'classobj' object has no attribute '__getitem__'
print B.__dict__
# { ... '__getitem__': <classmethod object at 0x024F5E70>}

Как мне сделать__getitem__work on the class itself?

1 ответ

Решение

Как отметил Martijn Pieters, хотелось бы определить метакласс для поиска специальных методов здесь.

Если вы можете использовать класс в новом стиле (или не знаете, что это):

class Meta_B(type):
    def __getitem__(self, key):
        raise IndexError
#

class B(object):
    __metaclass__ = Meta_B
#

тестовое задание

B[0]
# IndexError, as expected
Другие вопросы по тегам