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 21 Python
使用Python操作excel文件的实例代码
Oct 15 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
对pandas中Series的map函数详解
Jul 25 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
python简单实现9宫格图片实例
Sep 03 Python
关于Python错误重试方法总结
Jan 03 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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
第十一节--重载
2006/11/16 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
javascript preload&amp;lazy load
2010/05/13 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
Python查找相似单词的方法
2015/03/05 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
浅析python协程相关概念
2018/01/20 Python
python机器学习之KNN分类算法
2018/08/29 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
高中生家长寄语大全
2014/04/03 职场文书
实习单位推荐信
2015/03/27 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
签约仪式致辞
2015/07/30 职场文书