当类的属性包含 self 的实例时如何指定 numba jitclass

sla*_*law 3 python jit class 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
Run Code Online (Sandbox Code Playgroud)

我想 jit 这个类,但不清楚如何在self._leftself._rightNode对象类型时定义类型。我遇到了另一个答案.class_type.instance_type,但该示例仅引用包含不同类实例的类属性。就我而言,由于Node尚未定义,我无法声明以下规范:

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

@jitclass(spec)
class Node(object):
Run Code Online (Sandbox Code Playgroud)

chr*_*isb 5

基于这个例子- 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
Run Code Online (Sandbox Code Playgroud)