You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Numba的@jitclass中传递另一个@jitclass类作为属性类型?

解决Numba jitclass中包含单个jitclass类型属性的问题

当你在定义被@jitclass装饰的Position类时,直接把OrderBook类本身写进spec会报错,因为Numba的jitclass spec要求每个属性对应Numba类型实例,而不是jitclass的类对象。

解决方法

显式使用jitclass生成的类型实例,也就是通过OrderBook.class_type来获取这个类型,然后写进Position的spec里。

完整代码示例

from numba import jitclass, int64, float64

# 先定义OrderBook jitclass
order_book_spec = [
    ('bid_price', float64),
    ('ask_price', float64),
    ('bid_size', int64),
    ('ask_size', int64)
]

@jitclass(order_book_spec)
class OrderBook:
    def __init__(self, bid_price, ask_price, bid_size, ask_size):
        self.bid_price = bid_price
        self.ask_price = ask_price
        self.bid_size = bid_size
        self.ask_size = ask_size

# 获取OrderBook对应的Numba类型实例
ob_numba_type = OrderBook.class_type

# 定义包含单个OrderBook属性的Position jitclass
position_spec = [
    ('position_size', int64),
    ('avg_price', float64),
    ('last_ob', ob_numba_type)  # 这里用类型实例而非类本身
]

@jitclass(position_spec)
class Position:
    def __init__(self, position_size, avg_price, last_ob):
        self.position_size = position_size
        self.avg_price = avg_price
        self.last_ob = last_ob

为什么列表类型可以直接用OrderBook?

types.ListType(OrderBook)能正常编译是因为Numba在处理ListType的参数时,会自动调用传入类的.class_type属性获取对应的类型实例,不需要你手动指定。但单个属性的spec没有这个自动处理逻辑,所以必须显式传入类型实例。

内容的提问来源于stack exchange,提问作者Jerem Lachkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:10:02