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 28 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 Python
通过python顺序修改文件名字的方法
Jul 11 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
tensorflow实现加载mnist数据集
Sep 08 Python
用Python解决x的n次方问题
Feb 08 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Puppeteer使用示例详解
Jun 20 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
python实现俄罗斯方块小游戏
Apr 24 Python
Python经典五人分鱼实例讲解
Jan 04 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 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
PHP图片上传类带图片显示
2006/11/25 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
koa socket即时通讯的示例代码
2018/09/07 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
vue 组件简介
2020/07/31 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
python进阶_浅谈面向对象进阶
2017/08/17 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
利用python进行文件操作
2020/12/04 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
汉语言文学毕业生求职信
2013/10/01 职场文书
玲玲的画教学反思
2014/02/04 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
颁奖晚会主持词
2014/03/25 职场文书
大学生活自我评价
2014/04/09 职场文书
教师研修随笔感言
2015/11/18 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
Python实现拼音转换
2021/06/07 Python
Python 中 Shutil 模块详情
2021/11/11 Python
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android