Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 类中的对象比较_Python 3.x_Jit_Numba - Fatal编程技术网

Python 3.x 类中的对象比较

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

如何比较两个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.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