почему бы не наследовать от np.array
?
import numpy as np
class myExample(np.ndarray):
def __new__(cls):
zero = np.zeros((2, 4), dtype=np.int)
obj = np.asarray(zero).view(cls)
return obj
Test = myExample()
Test[1,2] = 3
print(Test)
таким образом, чтобы получить геттеры и сеттеры (__getitem__
/ __setitem__
) длябесплатно.
(обратите внимание, что ваш индекс [1, 2]
выходит за границы вашей фигуры [2, 2]
).
и ваш пример действительно работает, если у вас просто есть getter
;вы возвращаете np.array
, который уже обладает необходимыми свойствами:
import numpy as np
class myExample:
def __init__(self):
self._matrix = np.empty([3, 4])
@property
def matrix(self):
return self._matrix
Test = myExample()
Test.matrix[1,2] = 3
обновить после комментариев ОП: если вам нужно распечатать матрицу (или сделать что-то другое) перед установкой элементов, которые вы можете попробоватьэто:
import numpy as np
class myExample:
def __init__(self):
self._matrix = np.zeros([3, 4])
@property
def matrix(self):
return self._matrix
def __setitem__(self, key, value):
print(self._matrix) # or other things...
self._matrix[key] = value
Test = myExample()
Test[1, 3] = 5