如何编写静态python getitem方法?

时间:2011-05-31 12:59:39

标签: python static operator-keyword magic-methods

我需要做些什么来改变这项工作?

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

print A[0]

请注意,我在类型__getitem__上调用A方法。

2 个答案:

答案 0 :(得分:24)

当对象编入索引时,首先在对象的类中查找特殊方法__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

答案 1 :(得分:0)

Python 3.7引入了__class_getitem__

class A:
    def __class_getitem__(cls, key):
        return "It works"

print(A[0])