以下是我的代码的一部分:
some_item = target_item
first_item = my_list[0]
print first_item
print some_item
print my_list.index(first_item)
print my_list.index(some_item)
print "Finished"
exit()
这就是我得到的:
<models.adb.ADB object at 0x7f1ec7654b50>
<models.seb.SEB object at 0x7f1ec7654b90>
0
0
Finished
my_list
中的我的项目是类对象。
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
这取决于为ADB
和SEB
实施的比较,可能是通过为此类实施__eq__
运算符。
当python在列表中查找first_item
和some_item
的实例时,他将使用此运算符来确定列表中的i
- 元素是否为此元素,扫描每i
。
因此,如果实现类似
class Parent:
def __init__(self):
self.x = 0
def __eq__(parentObj):
return self.x == parentObj.x
class ADB (Parent):
def __init__(self): super.__init__()
class SEB (Parent):
def __init__(self): super.__init__()
它会导致ADB() == SEB()
,因此导致对象同时“匹配”#34;与它进行比较时的第一个列表元素,但同时是不同的对象。
请注意,同样可以这样做,使用继承来简化示例。
class ADB (Parent):
def __init__(self):
self.x = 0
def __eq__(obj):
return self.x == obj.x
class SEB (Parent):
def __init__(self):
self.x = 0
def __eq__(obj):
return self.x == obj.x