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
.
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
.
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])
© 2022 - 2024 — McMap. All rights reserved.