Добавление частного атрибута в подкласс массива NumPyPython

Программы на Python
Anonymous
Добавление частного атрибута в подкласс массива NumPy

Сообщение Anonymous »

В документации NumPy показано, что вы можете добавить собственный атрибут, создав подкласс ndarray:

Код: Выделить всё

import numpy as np

class RealisticInfoArray(np.ndarray):
def __new__(cls, input_array, info=None):
obj = np.asarray(input_array).view(cls)
obj.info = info
return obj

def __array_finalize__(self, obj):
if obj is None: return
self.info = getattr(obj, 'info', None)

arr = np.arange(5)
obj = RealisticInfoArray(arr, info='information')
print(obj.info)
Этот пример работает отлично. Однако, если я хочу сделать новый атрибут «частным» (т. е. вызвав атрибут self._info):

Код: Выделить всё

import numpy as np

class RealisticInfoArray(np.ndarray):
def __new__(cls, input_array, info=None):
obj = np.asarray(input_array).view(cls)
obj.info = info
return obj

def __array_finalize__(self, obj):
if obj is None: return
self._info = getattr(obj, 'info', None)

arr = np.arange(5)
obj = RealisticInfoArray(arr, info='information')
print(obj._info)
Тогда печатается «Нет». Может ли кто-нибудь помочь мне понять, почему это так и как это исправить, чтобы obj._info не имел значения None и вел себя так же, как в первом примере?

Подробнее здесь: https://stackoverflow.com/questions/784 ... umpy-array

Вернуться в «Python»