#python #python_3x #numpy
class A(numpy.ndarray): def __init__(self,x,y): print ('Конструктор') a = A(2,3) Выдаёт ошибку : TypeError: data type not understood Если использовать один параметр. class A(numpy.ndarray): def __init__(self,x): print ('Конструктор') a = A(2) То всё нормально, будет напечатано конструктор. Если нет параметров class A(numpy.ndarray): def __init__(self): print ('Конструктор') a = A() То будет ошибка : TypeError: Required argument 'shape' (pos 1) not found Почему нельзя перегрузить конструктор numpy.ndarray
Ответы
Ответ 1
В документации сказано, что при перегрузке конструктора ndarray начинать необходимо с реализации метода __new__, так как там происходит большая часть работы по инициализации массива вопреки обычному __init__. Вот простой пример из документации, где описаны три рекомендуемых метода, необходимых для инициализации: import numpy as np class C(np.ndarray): def __new__(cls, *args, **kwargs): print('In __new__ with class %s' % cls) return super(C, cls).__new__(cls, *args, **kwargs) def __init__(self, *args, **kwargs): # in practice you probably will not need or want an __init__ # method for your subclass print('In __init__ with class %s' % self.__class__) def __array_finalize__(self, obj): print('In array_finalize:') print(' self type is %s' % type(self)) print(' obj type is %s' % type(obj)) Там же приведены более расширенные примеры и подробное описание ролей каждого из методов-этапов конструктора.
Комментариев нет:
Отправить комментарий