问题
What do I need to change to make this work?
class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
Note that I am calling the __getitem__
method on the type A
.
回答1:
When an object is indexed, the special method __getitem__
is looked for first in the object's class. A class itself is an object, and the class of a class is usually type
. So to override __getitem__
for a class, you can redefine its metaclass (to make it a subclass of type
):
class MetaA(type):
def __getitem__(cls,val):
return "It works"
class A(object):
__metaclass__=MetaA
pass
print(A[0])
# It works
In Python3 the metaclass is specified this way:
class A(object, metaclass=MetaA):
pass
来源:https://stackoverflow.com/questions/6187932/how-to-write-a-static-python-getitem-method