我需要做些什么来改变这项工作?
class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
请注意,我在类型__getitem__
上调用A
方法。
答案 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])