如何编写静态的 Python getitem 方法?

23 投票
2 回答
7383 浏览
提问于 2025-04-16 18:40

我需要做什么改变才能让这个工作?

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

print A[0]

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

2 个回答

25

Python 3.7 版本引入了一个新的功能,叫做 __class_getitem__

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

print(A[0])
32

当你对一个对象进行索引操作时,系统首先会在这个对象的类里面查找一个特殊的方法,叫做 __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

撰写回答