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闭包实现计数器的方法
May 05 Python
Python字符串详细介绍
May 09 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
python文件与目录操作实例详解
Feb 22 Python
批处理与python代码混合编程的方法
May 19 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python web框架中实现原生分页
Sep 08 Python
python实现身份证实名认证的方法实例
Nov 08 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
python开发实时可视化仪表盘的示例
May 07 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若干单维数组遍历方法的比较
2011/09/20 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
Python切片工具pillow用法示例
2018/03/30 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
利用python实现AR教程
2019/11/20 Python
tensorflow 模型权重导出实例
2020/01/24 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
商务英语求职自荐信范文
2013/12/24 职场文书
学生安全承诺书
2014/05/22 职场文书
资料员岗位职责
2015/02/10 职场文书
大学生自荐信范文
2015/03/05 职场文书