Python 3.x 类中的对象比较
如何比较两个numba jitclass对象以确定它们是否相同 我有以下代码Python 3.x 类中的对象比较,python-3.x,jit,numba,Python 3.x,Jit,Numba,如何比较两个numba jitclass对象以确定它们是否相同 我有以下代码 from numba import jitclass import numba node_type = numba.deferred_type() DoubleLinkedNode_spec = [ ('value', numba.optional(numba.typeof(1.0))), ('prev', numba.optional(node_type)), ('next', numba.option
from numba import jitclass
import numba
node_type = numba.deferred_type()
DoubleLinkedNode_spec = [
('value', numba.optional(numba.typeof(1.0))),
('prev', numba.optional(node_type)),
('next', numba.optional(node_type))
]
@jitclass(DoubleLinkedNode_spec)
class DoubleLinkedNode(object):
def __init__(self, value, prev, next):
self.value = value
self.prev = prev
self.next = next
node_type.define(DoubleLinkedNode.class_type.instance_type)
n1 = DoubleLinkedNode(1.0, None, None)
n2 = DoubleLinkedNode(2.0, n1, None)
n1.next = n2
print(f'{n2}\n{n2.prev.next}')
#outputs:
# <numba.jitclass.boxing.DoubleLinkedNode object at 0x7fbf26923850>
# <numba.jitclass.boxing.DoubleLinkedNode object at 0x7fbf256b3cf0>
print(f'Next is None. n1: {n1.next is None} n2: {n2.next is None}')
#outputs:
# Next is None. n1: False n2: True
来自numba导入类
进口麻木
节点类型=numba.deferred类型()
DoubleLinkedNode_规范=[
('value',numba.可选(numba.typeof(1.0)),
('prev',numba.可选(节点类型)),
('next',numba.可选(节点类型))
]
@jitclass(双链接节点规范)
类DoubleLinkedNode(对象):
定义初始值(自身、值、上一个、下一个):
自我价值=价值
self.prev=prev
self.next=下一个
节点类型.定义(DoubleLinkedNode.class类型.实例类型)
n1=双链接节点(1.0,无,无)
n2=双链接节点(2.0,n1,无)
n1.next=n2
打印(f'{n2}\n{n2.prev.next}')
#产出:
#
#
打印(f'Next为None.n1:{n1.Next为None}n2:{n2.Next为None})
#产出:
#其次是没有。n1:False n2:True
这是双链接列表的标准节点
is
运算符不工作,因为它们不在同一内存地址中
无
似乎有效。但我能相信吗Dunder方法不能正确地处理JIT类,所以我实现了类似于
\uuuueq\uuuu
的东西
来自numba.class的
进口麻木
节点类型=numba.deferred类型()
DoubleLinkedNode_规范=[
('value',numba.可选(numba.typeof(1.0)),
('prev',numba.可选(节点类型)),
('next',numba.可选(节点类型))
]
@jitclass(双链接节点规范)
类DoubleLinkedNode(对象):
定义初始值(自身、值、上一个、下一个):
自我价值=价值
self.prev=prev
self.next=下一个
def equal(自身、其他):
返回self.prevs_eq(其他)和self.nexts_eq(其他)
def prevs_eq(自身、其他):
尽管如此:
如果self.prev为无:
返回self.value==other.value
如果不是self.value==其他.value:
返回错误
self=self.prev
other=other.prev
def nexts_eq(自身、其他):
尽管如此:
如果self.next为无:
返回self.value==other.value
如果不是self.value==其他.value:
返回错误
self=self.next
下一个
节点类型.定义(DoubleLinkedNode.class类型.实例类型)
n1=双链接节点(1.0,无,无)
n2=双链接节点(2.0,n1,无)
n1.next=n2
打印(f'{n2.equal(n2.prev.next)}')
#真的
您必须调用
equal
方法,但如果将其重命名为\uuuu eq\uuu
,则该方法根本不起作用。这适用于我迄今为止所测试的对象。您能否指定,您希望如何比较这两个对象?比较值
属性的相似性是否足够,还是必须比较下一个
和上一个
呢?我想比较下一个
和上一个
。如果我断言a=b
我希望a==b
的计算结果为True
请查看\uuueq\uuuuu(self,other)
方法运行代码时,我会得到以下警告@jitclass(DoubleLinkedNode\uspec)NumbedPreactionWarning:“numba.jitclass”装饰器已移动到“numba.experimental.jitclass”,以更好地反映功能的实验性质。请更新您的导入以适应此更改,请参阅http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#change-时间范围内的jitclass位置。
jitclass似乎也不支持类成员,因此定义\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
不是一个选项,因为它会创建\uuuuuuu