如何编写静态python getitem方法?

Wol*_*tan 12 python static magic-methods operator-keyword

为了使这项工作,我需要改变什么?

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

print A[0]
Run Code Online (Sandbox Code Playgroud)

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

unu*_*tbu 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
Run Code Online (Sandbox Code Playgroud)

在Python3中,元类以这种方式指定:

class A(object, metaclass=MetaA):
    pass
Run Code Online (Sandbox Code Playgroud)

  • @ups:在Python3中以不同的方式指定元类。我在上面添加了代码来演示如何进行。 (2认同)

Cru*_*Liu 5

Python 3.7 引入__class_getitem__

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

print(A[0])
Run Code Online (Sandbox Code Playgroud)