让我说我上课
class Foo:
def __init__(self, item1, item2):
self.item1 = item1
self.item2 = item2
以及该类的对象列表
object1 = Foo (1,2)
object2 = Foo (1,2)
object3 = Foo (1,3)
objectlist = [object1, object3]
我想知道具有相同项目的object2是否在objectlist列表中,之后我想获取它的索引。在这种情况下,索引为0。
我可以通过
def __eq__ (self, other):
return (self.item1 == other.item1) and (self.item2 == other.item2)
还有一个for循环。因为我可以逐个检查每个索引,并获得等于该对象的索引。但是我可以用更卑鄙的方式做到这一点吗?
答案 0 :(得分:3)
怎么样?
class Foo:
def __init__(self, item1, item2):
self.item1 = item1
self.item2 = item2
def __eq__ (self, other):
return (self.item1 == other.item1) and (self.item2 == other.item2)
object1 = Foo (1,2)
object2 = Foo (1,2)
object3 = Foo (1,3)
objectlist = [object1, object3]
try:
index_value = objectlist.index(object2)
print(index_value)
except ValueError:
index_value = -1
print(index_value)
答案 1 :(得分:0)
问题是,您是否要区分不同的对象,但包含相同值的item1
和item2
。
如果是,则不必检查对象的内容。而是依靠类的每个实例的不同标识符(id(obj)
)
object2 in objectlist
如果没有,那么您的方法(几乎)是正确的方法,我不知道有任何更好的方法。在您的情况下,您不是严格检查两个对象的类是否相同,而是-它们在结构上是相同的(即它们具有相同的成员item1
和item2
)
您可能还想查看以下问题的答案:Compare object instances for equality by their attributes in Python