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正则表达式常用函数总结
Jun 24 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
Django后台admin的使用详解
Jul 08 Python
python实现按行分割文件
Jul 22 Python
linux下python中文乱码解决方案详解
Aug 28 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
Python基于Webhook实现github自动化部署
Nov 28 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和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
python处理xml文件的方法小结
2017/05/02 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
解析Python的缩进规则的使用
2019/01/16 Python
更新修改后的Python模块方法
2019/03/03 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
机电专业求职信
2014/06/14 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
敬老月活动总结
2014/08/28 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书