Python小知识之对象的比较
2021-10-12 16:24
483 查看
好久不见
国庆回了趟
老家,躺平了10天。作息时间基本和小学生差不多,8、9点就睡了, 那滋味别提多舒服了。时间也和小时候过得一样慢了...长时间不更新,还是不行滴,粉都快掉没了。
今天就结合
日常生活的例子,给大家讲讲Python对象之间的比较。(内容不多,小娃儿都能看懂)
场景
米洛今年国庆节打算给新家添置一些日用的东西,比如床、四件套等等。为此,他使用了各大
电商平台的app,但因为是
新家,所以有些app还没有录入地址。
于是他干脆进行了一波整理,在他的
收货地址里面,找寻自己是否添加过最新的地址。
我们都知道,收货地址最重要的就是
地址+
电话了,通过这个可以确定一个人。因为有些英雄美女喜欢把姓名写成:
喵星人,
吴彦祖这样的,所以只要确保地址和电话对得上就行。
那我们就需要比较地址是否有重复的,这样就好好管理自己的收货地址嘛。
代码里的收货地址
我们定义一个Receiver类,里面有name/address/mobile3个字段:
class Receiver(object): def __init__(self, name, addr, mobile): self.name = name self.addr = addr self.mobile = mobile if __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 = name self.addr = addr self.mobile = mobile def __eq__(self, other): return self.addr == other.addr and self.mobile == other.mobile if __name__ == "__main__": r = Receiver("小孟", "梅苑小区", 13922222222) r2 = Receiver("小孟", "梅苑小区", 13922222222) print(r == r2)
扩展
既然能够比较对象是否相等,那能否比较对象大小呢?那就等大家自己探索了,关键字:
lt, gt, ge, le
另外,还有
__str__,
__repr__,
__hash__等方法,大家感兴趣也可以自己重写着玩玩。
相关文章推荐
- python 1 面向对象基础知识
- Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
- python面向对象知识总结梳理
- python核心编程中的对象值比较VS对象身份比较
- Python面向对象基础知识
- Python之time和date time模块、calendar模块、类与对象知识与析构函数。
- python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法
- python对象身份的比较
- Python rich comparisons 自定义对象比较过程和返回值
- Python 对象知识实践
- python知识整理--议可变对象和不可变对象以及str、list、tuple、dict、set
- python 之 不同类型对象的内存占用、大小比较
- Python中的is和==比较两个对象的两种方法
- Python程序设计与科学计算精录&总结Episode.2 Python基础语法:函数、模块、内置数据结构、面向对象知识总结(基于Michael导师Python课程与VS2019)
- Python面向对象基础知识
- python对象的比较(is,==,对象大小比较>,<)
- Python面向对象的基础知识:类Class,对象(Object),实例(Instance)
- 在Python中marshal对象序列化的相关知识
- python 学习之 对象的比较和拷贝以及python中的参数传递
- 零基础学python-4.3 对象的比较