У меня есть простой класс 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._left
и self._right
относятся к типу объектов Node
. Я наткнулся на этот другой ответ, который использует .class_type.instance_type
но этот пример относится только к атрибуту класса, который содержит другой экземпляр класса. В моем случае, поскольку Node
еще не определен, я не могу объявить следующую спецификацию:
spec=[("_left", Node.class_type.instance_type),
("_right", Node.class_type.instance_type),
]
@jitclass(spec)
class Node(object):
Основываясь на этом примере - в 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
Node
? Я получаю сообщение о том, что не могу создать подкласс jitclass