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 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
python读写ini文件示例(python读写文件)
Mar 25 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
python 实现调用子文件下的模块方法
Dec 07 Python
python直接获取API传递回来的参数方法
Dec 17 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
python系列 文件操作的代码
Oct 06 Python
Python求正态分布曲线下面积实例
Nov 20 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
原生JS轮播图插件
2017/02/09 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Python3爬虫全国地址信息
2019/01/05 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
汽车销售顾问求职自荐信
2014/01/01 职场文书
贷款收入证明范本
2015/06/12 职场文书
公历12个月名称的由来
2022/04/12 杂记
python 闭包函数详细介绍
2022/04/19 Python
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技