Я хочу создать подкласс np.ndarray
, чтобы создать класс для 2D-точек с большей частью доступного оборудования Numpy и некоторыми дополнительными методами, определяющими c для 2D-массивов. Одним из таких методов является вращение точки вокруг начала координат. Я попытался сделать это, используя умножение матриц, а затем присвоив моей точке атрибут data
результата.
>>> import numpy as np
>>> class Point2D(np.ndarray):
... def __new__(cls, coords):
... point = np.array(coords, dtype=float).view(cls)
... if point.shape != (2,):
... raise ValueError("A Point2D needs exactly two coordinates.")
... return point
...
... def rotate(self, angle):
... self.data = (np.array([[np.cos(angle), -np.sin(angle)],
... [np.sin(angle), np.cos(angle)]]) @ self).data
...
>>> x = Point2D((1, 0))
>>> x.rotate(np.pi/2)
__main__:10: DeprecationWarning: Assigning the 'data' attribute is an inherently unsafe operation and will be removed in the future.
Предупреждение об устаревании побуждает меня не назначать атрибут data
. Что мне делать вместо этого?