当class属性包含self实例时,如何指定numba jitclass

时间:2019-01-13 18:17:13

标签: python class jit numba

我有一个简单的Python类:

class Node(object):
    def __init__(self):
        self._left = self
        self._right = self

    @property
    def left(self):
        return self._left

    @left.setter
    def left(self, value):
        self._left = value

    @property
    def right(self):
        return self._right

    @right.setter
    def right(self, value):
        self._right = value

我想简化此类,但是当self._leftself._rightNode对象类型时,如何定义类型还不清楚。我遇到了使用.class_type.instance_type的{​​{3}}答案,但是该示例仅引用了包含 different 类实例的类属性。就我而言,由于尚未定义Node,因此我无法声明以下规范:

spec=[("_left", Node.class_type.instance_type),
      ("_right", Node.class_type.instance_type),
     ]

@jitclass(spec)
class Node(object):

1 个答案:

答案 0 :(得分:0)

基于此example-numba在这种情况下具有deferred_type功能。

node_type = numba.deferred_type()
spec=[
    ("_left", node_type),
    ("_right", node_type),
]

@jitclass(spec)
class Node:
    # omitted

# define the deferred type
node_type.define(Node.class_type.instance_type)

# class can be used!
a = Node()
b = Node()
a.left = b