如何让Python 2的__getitem__在一个类上工作?

时间:2014-04-29 16:09:49

标签: python magic-methods python-datamodel first-class

如何进行物品访问,即。 {2.}}在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__在课堂上工作?

1 个答案:

答案 0 :(得分:1)

pointed out作为Martijn Pieters,我们希望在此处为special methods lookup定义元类。

如果你可以使用新式课程(或者不知道那是什么):

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

class B(object):
    __metaclass__ = Meta_B
#

测试

B[0]
# IndexError, as expected