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中条件判断语句的简单使用方法
Aug 21 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
Python检测端口IP字符串是否合法
Jun 05 Python
python的flask框架难学吗
Jul 31 Python
Python字符串及文本模式方法详解
Sep 10 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 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中二维数组排序问题方法详解
2015/08/28 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
Vue实现简单的跑马灯
2020/05/25 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
使用python绘制人人网好友关系图示例
2014/04/01 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python 系统调用的实例详解
2017/07/11 Python
python如何求圆的面积
2020/07/01 Python
如何用python 操作zookeeper
2020/12/28 Python
Python try except else使用详解
2021/01/12 Python
python中四舍五入的正确打开方式
2021/01/18 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
实习生个人的自我评价
2013/12/08 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
Python机器学习之决策树和随机森林
2021/07/15 Javascript
html form表单基础入门案例讲解
2021/07/21 HTML / CSS