AI智能
改变未来

Python小知识之对象的比较


好久不见

国庆回了趟

老家

,躺平了10天。作息时间基本和小学生差不多,8、9点就睡了, 那滋味别提多舒服了。时间也和小时候过得一样慢了…长时间不更新,还是不行滴,粉都快掉没了。

今天就结合

日常生活的例子

,给大家讲讲Python对象之间的比较。(内容不多,小娃儿都能看懂

场景

米洛今年国庆节打算给新家添置一些日用的东西,比如床、四件套等等。为此,他使用了各大

电商平台

的app,但因为是

新家

,所以有些app还没有录入地址。

于是他干脆进行了一波整理,在他的

收货地址

里面,找寻自己是否添加过最新的地址。

我们都知道,收货地址最重要的就是

地址

+

电话

了,通过这个可以确定一个人。因为有些英雄美女喜欢把姓名写成:

喵星人

吴彦祖

这样的,所以只要确保地址和电话对得上就行。

那我们就需要比较地址是否有重复的,这样就好好管理自己的收货地址嘛。

代码里的收货地址

我们定义一个Receiver类,里面有name/address/mobile3个字段:

class Receiver(object):def __init__(self, name, addr, mobile):self.name = nameself.addr = addrself.mobile = mobileif __name__ == "__main__":r = Receiver("小孟", "梅苑小区", 13922222222)r2 = Receiver("小孟货", "梅苑小区", 13922222222)print(r == r2)

这样我们的

生活

就映射到了

代码

之中。由于我们要比较,所以我们这边new了2个

收货地址

我们想要的是,当addr和mobile一致的时候,我们确定这2个收货地址

相同

来看看执行效果:

因为r和r2是2个不同的对象,所以他们是肯定不相等的。

思考: 如果是单例模式的class,r等于r2吗?

了解__eq__方法

我们知道,在Python里面比较数字/字符串是否相等,那2个对象是否相等。其实

也是可以比较

的。这一切都要归功于

__eq__

这个方法。

可以看到有个向上的箭头,这个代表

子类

重写了

父类

的方法。我们点击一下:

在我们比较2个对象的时候:

r == r2

, 实际上是执行了这样的方法:

r.__eq__(r2)

不信咱们试试:

实现

熟悉了__eq__以后,我们问题就迎刃而解了。我们只需要在__eq__方法里面写上对应的判断方法即可。

class Receiver(object):def __init__(self, name, addr, mobile):self.name = nameself.addr = addrself.mobile = mobiledef __eq__(self, other):return self.addr == other.addr and self.mobile == other.mobileif __name__ == "__main__":r = Receiver("小孟", "梅苑小区", 13922222222)r2 = Receiver("小孟", "梅苑小区", 13922222222)print(r == r2)

扩展

既然能够比较对象是否相等,那能否比较对象大小呢?那就等大家自己探索了,关键字:

lt, gt, ge, le

另外,还有

__str__

,

__repr__

,

__hash__

等方法,大家感兴趣也可以自己重写着玩玩。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Python小知识之对象的比较