我需要改变什么才能使这项工作?
class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
请注意,我__getitem__
在 type 上调用该方法A
。
我需要改变什么才能使这项工作?
class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
请注意,我__getitem__
在 type 上调用该方法A
。
索引对象时__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
Python 3.7 引入了__class_getitem__
.
class A:
def __class_getitem__(cls, key):
return "It works"
print(A[0])