Ответ 1
Вы хотите определить специальный метод __getitem__
[docs].
class Test(object):
def __getitem__(self, arg):
return str(arg)*3
test = Test()
print test[0]
print test['kitten']
Результат:
000 kittenkittenkitten
Я хотел бы создать новый класс, который действует как особый тип контейнера для объектов и может быть доступен с помощью квадратных скобок.
Например, предположим, что у меня есть класс под названием ListWrapper
. Предположим, что obj
a ListWrapper
. Когда я говорю obj[0]
, я ожидаю, что метод obj.access()
будет вызван с 0 в качестве аргумента. Тогда я могу вернуть все, что захочу. Возможно ли это?
Вы хотите определить специальный метод __getitem__
[docs].
class Test(object):
def __getitem__(self, arg):
return str(arg)*3
test = Test()
print test[0]
print test['kitten']
Результат:
000 kittenkittenkitten
Стандартные объекты Python имеют ряд методов с именем __something__
, которые в основном используются для создания объектов, которые подключаются к API на языке. Например, __getitem__
и __setitem__
- это методы, которые вызываются для получения или установки значений с помощью обозначения []
. Ниже приведен пример создания того, что выглядит как подкласс словаря Python: https://github.com/wavetossed/mcdict
Обратите внимание, что это не словарь подкласса, а также метод update
. Оба они необходимы, если вы хотите, чтобы ваш класс правильно маскировался как словарь Python.