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多线程扫描端口示例
Jan 16 Python
python实现用户登录系统
May 21 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Python使用Pandas库常见操作详解
Jan 16 Python
Python实现UDP程序通信过程图解
May 15 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
python使用布隆过滤器的实现示例
Aug 20 Python
Python Django搭建文件下载服务器的实现
May 10 Python
python接口测试返回数据为字典取值方式
Feb 12 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的ob_start来生成静态页面的方法分析
2011/03/09 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
express 项目分层实践详解
2018/12/10 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
Python pickle模块用法实例分析
2015/05/27 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
日本语毕业生自荐信
2014/02/01 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
项目施工员岗位职责
2014/03/09 职场文书
少先队活动总结
2014/08/29 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
婚育证明样本
2015/06/16 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
给学校的建议书400字
2015/09/14 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
人民调解协议书
2016/03/21 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python