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 @   天子骄龙  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-09-16 qt5-资源与图像
点击右上角即可分享
微信分享提示

目录导航