如何编写静态的 Python getitem 方法?
我需要做什么改变才能让这个工作?
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