Я пытаюсь реализовать функциональность части для класса, который я делаю, который создает векторное представление.
У меня есть этот код до сих пор, которому я верю, правильно реализует часть, но каждый раз, когда я делаю вызов как 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]
Метод __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')
Правильный способ сделать это состоит в том, чтобы __getitem__
принимал один параметр, который может быть либо числом, либо объектом среза.
См:
http://docs.python.org/library/functions.html#slice
http://docs.python.org/reference/datamodel.html#object.__getitem__