Python:__eq__和__str__函数的使用示例


Posted in Python onSeptember 26, 2020

一.__eq__方法

在我们定义一个类的时候,常常想对一个类所实例化出来的两个对象进行判断这两个对象是否是完全相同的。一般情况下,我们认为如果同一个类实例化出来的两个对象的属性全都是一样的话,那么这两个对象是相同的。但是如果我们直接用"==”来判断这两个对象知否相等,那么结果一定是不相等的,因为这两个对象的地址一定不同,它们在内存当中的不同区域,比如我们有代码:

class Item:
 def __init__(self, name, weight):
  self.name=name
  self.weight=weight
 


cat_1 = Item('Cat', 5)
cat_2 = Item('Cat', 5)

print(cat_1 == cat_2)

这段代码当中,我们创建了两个“item”对象,它们的属性“name”和“weight”都完全一致,这段程序看似正确,应该打印出True,但实际上输出是:

False

原因则是因为这两个对象的地址是不同的,那么怎么才能够让它们只要属性相同两个对象就相等呢?那就是利用__eq__方法来进行判断,这个方法默认有两个参数,一个是self,另一个是other.也就是用自身的属性和other对象的属性分别进行比较,如果比对成功则返回True,失败则返回False。你也可以自定义想要比较的属性有哪些,也不一定是全部的属性都一样才相等。我们有代码:

class Item:
 def __init__(self, name, weight):
  self.name=name
  self.weight=weight
 
 def __eq__(self, other):
  # `__eq__` is an instance method, which also accepts
  # one other object as an argument.
  
  if type(other)==type(self) and other.name==self.name and other.weight==self.weight:
   return True
  else:
   return False# 返回False这一步也是需要写的哈,不然判断失败就没有返回值了



cat_1 = Item('Cat', 5)
cat_2 = Item('Cat', 5)

print(cat_1.__eq__(cat_2)) # should evaluate to True
print(cat_1 == cat_2) # should also evaluate to True

这样,就会打印出两个True了。

二.__str__方法

我们如果把自己创建的对象直接打印出来,那么一般是这样,比如我们有代码:

print(cat_1)

输出:

<__main__.Item object at 0x7f8e3d99f190

这是一个看起来十分难看的输出,输出的是这对象的类别和地址。但我们可以把这个输出改成自己想要的样子,那就是利用__str__方法。我们重写这个方法,让这个返回一个值,那么最后输出的就是我们的返回值,如下所示:

class Item:
 def __init__(self, name, weight):
  self.name=name
  self.weight=weight
 
 def __eq__(self, other):
  
  if type(other)==type(self) and other.name==self.name and other.weight==self.weight:
   return True
  else:
   return False
 def __str__(self):
  return 'the name of this cat is {}'.format(self.name)

再次创建并打印:

cat_1 = Item('Cat', 5)
cat_2 = Item('Cat', 5)

print(cat_1)
print(cat_2)

可得到输出:

the name of this cat is Cat
the name of this cat is Cat

这样这个输出看起来就不会有那么麻烦了,自定义的输出果然清晰了不少啊!

以上就是Python:__eq__和__str__函数的使用示例的详细内容,更多关于Python __eq__和__str__函数的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用cookie库操保存cookie详解
Mar 03 Python
python使用marshal模块序列化实例
Sep 25 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
Django静态文件加载失败解决方案
Aug 26 Python
pycharm 实现调试窗口恢复
Feb 05 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 Python
Python实现视频自动打码的示例代码
Apr 08 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 #Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 #Python
Python爬取股票信息,并可视化数据的示例
Sep 26 #Python
如何利用python发送邮件
Sep 26 #Python
Python 测试框架unittest和pytest的优劣
Sep 26 #Python
浅析python函数式编程
Sep 26 #Python
python用Configobj模块读取配置文件
Sep 26 #Python
You might like
php实现的简单日志写入函数
2015/03/31 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
js评分组件使用详解
2017/06/06 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
python设置随机种子实例讲解
2019/09/12 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
delegate与普通函数的区别
2014/01/22 面试题
关于元旦的广播稿
2014/02/16 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
小学英语课后反思
2014/04/26 职场文书
中队活动总结
2014/08/27 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
体检通知范文
2015/04/21 职场文书
十七岁的单车观后感
2015/06/12 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python