How to write a static python getitem method?
Asked Answered
G

2

23

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.

Grimona answered 31/5, 2011 at 12:59 Comment(0)
B
32

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
Back answered 31/5, 2011 at 13:3 Comment(1)
@ups: metaclasses are specified in a different way in Python3. I've added code to show how, above.Back
I
26

Python 3.7 introduced __class_getitem__.

class A:
    def __class_getitem__(cls, key):
        return "It works"

print(A[0])
Include answered 30/8, 2020 at 23:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.