How to write a static python getitem method?
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
Python 3.7 introduced __class_getitem__
.
class A:
def __class_getitem__(cls, key):
return "It works"
print(A[0])