根据对象状态的相等性获取列表中对象的索引

阿迪亚·巴维
class Shape():
    def __init__(self, n_sides, name):
        self.n_sides = n_sides
        self.name = name

def generate_shapes():
    return [Shape(4, 'square'), Shape(3, 'triangle'), Shape(4, 'rectangle')]

def generate_one_shape():
    return Shape(4, 'square')

shapes = generate_shapes()
one_shape = generate_one_shape()

shapes.index(one_shape)

我收到如下错误,因为 list.index() 从表面上比较了对象。

Traceback (most recent call last):
  File "list_remove_object_by_value.py", line 14, in <module>
    shapes.index(one_shape)
ValueError: <__main__.Shape instance at 0x7efffbbcec68> is not in list

我希望 list.index(one_shape) 将索引返回为 0。

如何使用具有相同属性值的 Shape 类的另一个实例有效地获取列表中 Shape 类实例的索引?

阿特尔

只需定义一个__eq__方法。

class Shape():
    def __init__(self, n_sides, name):
        self.n_sides = n_sides
        self.name = name

    def __eq__(self, other):
        """self == other"""
        if isinstance(other, Shape):
            # We can only compare if `other` is a Shape as well
            return self.n_sides == other.n_sides and self.name == other.name
        return NotImplemented

    def __ne__(self, other):
        """self != other"""
        eq = Shape.__eq__(self, other)
        return NotImplemented if eq is NotImplemented else not eq

操作员喜欢inindex做的是检查==彼此之间是否有任何项目这个__eq__方法定义了当==用这两个对象调用时会发生什么默认情况下,它会检查它们是否完全相同,但这会检查它们是否都是Shapes,并且是否具有相同的n_sidesname

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据属性值获取通用/列表中对象的索引

来自分类Dev

使用Linq获取列表中对象的索引

来自分类Dev

Linq代码从列表中的对象获取数组中对象的索引

来自分类Dev

在列表ii php中获取带有对象索引的对象

来自分类Dev

任意排序对象Kotlin列表的相等性

来自分类Dev

在Python中按属性获取对象列表中的索引

来自分类Dev

根据字典比较两个对象的相等性

来自分类Dev

根据字典比较两个对象的相等性

来自分类Dev

根据相等的属性和时间/日期的比较从列表中删除对象

来自分类Dev

列表中无效对象的索引

来自分类Dev

获取jQuery对象中DOM对象的索引

来自分类Dev

根据对象指针在向量中获取对象

来自分类Dev

根据对象中的一个属性从列表中获取最新的对象

来自分类Dev

从状态列表可绘制对象中获取特定的可绘制对象

来自分类Dev

断言特征对象的相等性?

来自分类Dev

R从对象列表中获取对象的名称

来自分类Dev

通过对象属性获取列表中的对象

来自分类Dev

从对象列表中获取唯一的对象

来自分类Dev

根据索引列表从数组中获取元素

来自分类Dev

从列表中获取对象Java

来自分类Dev

从响应中获取对象列表

来自分类Dev

从对象列表中获取值

来自分类Dev

Java中的相等对象

来自分类Dev

在Javascript测试(chai)中声明对象相等性

来自分类Dev

如何使Python对象在相等性测试中始终返回true?

来自分类Dev

如何在C ++中测试相关对象的相等性?

来自分类Dev

在Java中检查对象相等性而不包含相等性

来自分类Dev

Java 8:惯用地创建一个Comparator以便根据对象在列表中的索引对对象进行排序

来自分类Dev

如何从该对象中获取“状态”元素?

Related 相关文章

热门标签

归档