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实现竖排打印传单手机号码易撕条
Mar 16 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
深入理解python对json的操作总结
Jan 05 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Python实现微信机器人的方法
Sep 06 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
简单了解python列表和元组的区别
May 14 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
Python定义一个函数的方法
Jun 15 Python
如何使用Python调整图像大小
Sep 26 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
Python 的 Socket 编程
2015/03/24 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python自定义异常实例详解
2017/07/11 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
python之列表推导式的用法
2019/11/29 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
经济管理专业毕业生推荐信
2013/11/11 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
建筑投标担保书
2014/05/20 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL