Python: Реализация разрезания в __ getitem __

Я пытаюсь реализовать функциональность части для класса, который я делаю, который создает векторное представление.

У меня есть этот код до сих пор, которому я верю, правильно реализует часть, но каждый раз, когда я делаю вызов как v[4] то, где v является векторным Python, возвращает ошибку о не наличии достаточного количества параметров. Таким образом, я пытаюсь выяснить, как определить getitem специальный метод в моем классе для обработки и простых индексов и разрезания.

def __getitem__(self, start, stop, step):
    index = start
    if stop == None:
        end = start + 1
    else:
        end = stop
    if step == None:
        stride = 1
    else:
        stride = step
    return self.__data[index:end:stride]
99
задан Aaron Hall 19 December 2015 в 15:31
поделиться

2 ответа

Метод __getitem__() получит объект slice, когда объект будет нарезан. Просто посмотрите на члены start, stop и step объекта slice, чтобы получить компоненты для среза.

>>> class C(object):
...   def __getitem__(self, val):
...     print val
... 
>>> c = C()
>>> c[3]
3
>>> c[3:4]
slice(3, 4, None)
>>> c[3:4:-2]
slice(3, 4, -2)
>>> c[():1j:'a']
slice((), 1j, 'a')
108
ответ дан 24 November 2019 в 05:03
поделиться

Правильный способ сделать это состоит в том, чтобы __getitem__ принимал один параметр, который может быть либо числом, либо объектом среза.

См:

http://docs.python.org/library/functions.html#slice

http://docs.python.org/reference/datamodel.html#object.__getitem__

7
ответ дан 24 November 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: