У меня есть тип расширения Cython, который я хочу сделать более общим.Одним из атрибутов этого типа расширения является double
, и я хочу, чтобы это было представление памяти (double[::1]
) при необходимости.
Вот простой пример:
import numpy as np
cimport numpy as np
cimport cython
cdef class Test:
cdef bint numeric
cdef double du
def __init__(self, bint numeric):
self.numeric = numeric
if self.numeric:
self.du = 1
else:
self.du = np.ones(10)
def disp(self)
print(self.du)
Test(True).disp() # returns 1
Test(False).disp() # gives of course an error
Я попытался создать подкласс Test
, изменив тип du
на double[::1]
и внедрив новый __init__
, но, похоже, мы можемпереопределить атрибуты класса типов расширения.Даже если бы это работало, это не было бы удовлетворительно, потому что я действительно не хочу иметь один тип расширения для каждого случая.
Лучше всего, если бы мой тип расширения напрямую обрабатывал оба случая (скаляр du
и обзор памяти du
).
Есть ли способ сделать это с помощью Cython?