Cython/python - cdef类列表

1 投票
1 回答
1965 浏览
提问于 2025-04-20 21:04

我正在尝试改进这段使用列表类型的代码:

# CLASS ORDERC #
################
cdef class OrderC:
    cdef int _side
    cdef float _px
    cdef int _vo

    def __cinit__(self, int side, float px, int vo):
        # ....

    cdef setData(self, double[:] dates):
        # ....

# CLASS LISTORDERC #
####################
cdef class ListOrderC:
    cdef int _B
    cdef list _LO_Bid

    cdef double[:] _dates

    def __init__(self, num.ndarray[num.double_t, ndim=1] dates):
        self._B = 0
        self._LO_Bid = []
        self._dates = dates

    cpdef addOrder(self, OrderC oo):
       self._B += 1
       self._LO_Bid.append(oo)
       self._LO_Bid[-1].setData(self._dates)

当我从Python调用addOrder时,出现了问题:

 AttributeError: 'OrderC.OrderC' object has no attribute 'setData'

我猜是因为OrderC被识别为Python对象,所以我必须用cpdef来定义setData。但我希望OrderC被识别为cdef类,以提高性能。

你能帮我吗?

谢谢

1 个回答

1

问题在于,list 只能存放类型为 object 的东西,所以当你去访问的时候,得到的也是一个 object

你可能更想用 C++ 的 vector

撰写回答