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中asyncore的用法实例
Sep 29 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
基于Python脚本实现邮件报警功能
May 20 Python
python和go语言的区别是什么
Jul 20 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
深入理解Python装饰器
2016/07/27 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Python with语句和过程抽取思想
2019/12/23 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
四种会话跟踪技术
2015/05/20 面试题
战马观后感
2015/06/08 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
详解Python中的进程和线程
2021/06/23 Python
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers