Подтвердить что ты не робот

Создайте объект python, доступ к которому можно получить с помощью квадратных скобок

Я хотел бы создать новый класс, который действует как особый тип контейнера для объектов и может быть доступен с помощью квадратных скобок.

Например, предположим, что у меня есть класс под названием ListWrapper. Предположим, что obj a ListWrapper. Когда я говорю obj[0], я ожидаю, что метод obj.access() будет вызван с 0 в качестве аргумента. Тогда я могу вернуть все, что захочу. Возможно ли это?

4b9b3361

Ответ 1

Вы хотите определить специальный метод __getitem__ [docs].

class Test(object):     
    def __getitem__(self, arg):
        return str(arg)*3

test = Test()

print test[0]
print test['kitten']

Результат:

000
kittenkittenkitten

Ответ 2

Стандартные объекты Python имеют ряд методов с именем __something__, которые в основном используются для создания объектов, которые подключаются к API на языке. Например, __getitem__ и __setitem__ - это методы, которые вызываются для получения или установки значений с помощью обозначения []. Ниже приведен пример создания того, что выглядит как подкласс словаря Python: https://github.com/wavetossed/mcdict

Обратите внимание, что это не словарь подкласса, а также метод update. Оба они необходимы, если вы хотите, чтобы ваш класс правильно маскировался как словарь Python.