【问题标题】:How to specify numba jitclass when the class' attribute contains an instance of self当类的属性包含 self 的实例时如何指定 numba jitclass
【发布时间】:2019-01-15 23:26:40
【问题描述】:

我有一个简单的 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

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

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

@jitclass(spec)
class Node(object):

【问题讨论】:

    标签: python class jit numba


    【解决方案1】:

    基于这个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
    

    【讨论】:

    • 您是否知道我们是否可以从Node 类继承(或继承)?我收到一条错误消息,说我不能子类化 jitclass
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2016-12-05
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多