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自动扫雷实现方法
Jul 25 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
Python键盘输入转换为列表的实例
Jun 23 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
python smtplib发送多个email联系人的实现
Oct 09 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截取中文字符串的问题
2006/07/12 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
python中hashlib模块用法示例
2017/10/30 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Python实现随机爬山算法
2021/01/29 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
Linux操作面试题
2012/05/16 面试题
生产总经理岗位职责
2013/12/19 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
领导干部考察材料
2014/02/08 职场文书
司法所长先进事迹
2014/06/02 职场文书
部门2015年度工作总结
2015/04/29 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS