Implement list-like index access in Python

Question:

I’d like to be able to access some values of a python object using array-like syntax, ie:

obj = MyClass()
zeroth = obj[0]
first = obj[1]

Is this possible? If so, how do you implement this in the python class in question?

Asked By: PeterJCLaw

||

Answers:

You need to write or override __getitem__, __setitem__, and __delitem__.

So for example:

class MetaContainer():
    def __delitem__(self, key):
        self.__delattr__(key)

    def __getitem__(self, key):
        return self.__getattribute__(key)

    def __setitem__(self, key, value):
        self.__setattr__(key, value)

This is a very simple class that allows indexed access to its attributes.

Answered By: senderle

Use the __getitem__ and __setitem__ methods.

class MyClass:
    def __getitem__(self, key):
        return some_value_related_to_key

    def __setitem__(self, key, value):
        # set value (if needed)
Answered By: Håvard
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.