Вы не можете указывать элементы jitclass
, которые не имеют явного типа numba. Вы можете сделать это, однако, если A
также является jitclass
, а dict
не является стандартным диктоном Python, а вместо этого является диктатом, набираемым с помощью numba (numba.typed.Dict
). Типизированный dict поддерживается только в numba версии 0.43 и новее:
import numba as nb
@nb.jitclass([('x', nb.float64)])
class A(object):
def __init__(self, x):
self.x = x
a_type = nb.deferred_type()
dict_type = nb.deferred_type()
spec = [
('x', dict_type),
('y', a_type),
]
a_type.define(A.class_type.instance_type)
dict_type.define(nb.typeof(nb.typed.Dict.empty(key_type=nb.int64, value_type=nb.float64)))
@nb.jitclass(spec)
class B(object):
def __init__(self, x, y):
self.x = x
self.y = y
a = A(3.0)
d = nb.typed.Dict.empty(key_type=nb.int64, value_type=nb.float64)
d[1] = 1.1
b = B(d, a)
print(b.y.x) # => 3.0
print(b.x[1]) # => 1.1
Независимо от того, хотите ли вы или можете использовать jitclass
для A
или nb.typed.Dict
вместо питона dict
, будет зависеть от вашего конкретного варианта использования.