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

 

 

 

重写逻辑运算符视频 

 

 

 

 

 

 

 

posted @ 2024-09-16 06:50  天子骄龙  阅读(32)  评论(0编辑  收藏  举报