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)
Python 3.7 引入__class_getitem__。
class A:
def __class_getitem__(cls, key):
return "It works"
print(A[0])
Run Code Online (Sandbox Code Playgroud)