python- ==比较的原则eq函数
当类中没有__eq__函数时,根据地址比较
class Vector: def __init__(self, x, y): self.x = x self.y = y pos1=Vector(1,1) pos2=Vector(1,1) print(pos2==pos1)
自定义Vector类中没有__eq__函数,一般按地址比较,pos1和pos2是两个对象,两个对象的地址不同,所以返回False
当类中有__eq__函数时,根据内容比较
list1=[10] list2=[10] print(list2==list1)
list列表继承object类
object类有__eq__函数,所以按内容比较
in函数
没有eq函数时
class Vector: def __init__(self, x, y): self.x = x self.y = y list01=[ Vector(3,3), Vector(1,1), Vector(2,2), Vector(5,5), Vector(3,3), Vector(1,1), ] print(Vector(1,1) in list01) #Vector类没有__eq__函数,根据地址比较,Vector(1,1)产生的对象地址不在list01列表中,返回False print(list01.count(Vector(3,3))) #Vector类没有__eq__函数,根据地址比较,Vector(3,3)产生的对象地址不在list01列表中,返回0
有eq函数时
class Vector: def __init__(self, x, y): self.x = x self.y = y def __eq__(self, other): # 重写eq函数 return self.__dict__ == other.__dict__ # 返回内容,而不是返回地址 list01=[ Vector(3,3), Vector(1,1), Vector(2,2), Vector(5,5), Vector(3,3), Vector(1,1), ] print(Vector(1,1) in list01) #Vector类有__eq__函数,根据内容比较,Vector(1,1)的内容在list01列表中,返回True print(list01.count(Vector(3,3))) #Vector类有__eq__函数,根据内容比较,Vector(3,3)的内容在list01列表中,返回2
重写逻辑运算符视频