__getitem__
Для того, чтобы объект был субстригируемым, необходимо реализовать getitem (https://docs.python.org/3/reference/datamodel.html#object.getitem) в классе.
Однако вам необходимо присвоить значение объекту, например
class Some:
def __init__(self, v):
self.v = v
def __getitem__(self, i):
return self.v[i]
some = Some([1,2,3])
print(some[:2])
Результаты в
[1, 2]
Это должно работать и с numpy, который, я полагаю, вы используете.
collections.UserList
По сути, вы хотите расширить функциональность списков. Вы можете использовать класс UserList из модуля сборки в коллекциях: https://docs.python.org/3/library/collections.html#collections.UserList
Однако, насколько я знаю, это не работает с массивами-пустышками.
numpy.ndarray
В numpy вы можете наследовать от класса ndarray, например:
from numpy import ndarray
class A(ndarray):
def custom_function(self, x):
return self + x
a = A([1,2,3])
print(a.custom_function(666))
результат в
A([[[666., 666., 666.],
[666., 666., 666.]]])
Ссылки:
https://docs.scipy.org/doc/numpy/user/basics.subclassing.html#basics-subclassing
https://docs.scipy.org/doc/numpy/reference/arrays.classes.html
https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html#numpy.ndarray
Оба примера являются подписными.
Надеюсь, это поможет.
Еще немного
Ваш код не будет работать, потому что вместо функции у вас есть оператор return в теле класса.
Пожалуйста, не забывайте ставить импортные заявления в вопросах. массив не является частью стандартной библиотеки Python. Я просто догадываюсь, что это пустышка из-за свойства shape.