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使用PyGame模块播放声音的方法
May 20 Python
python开发简易版在线音乐播放器
Mar 03 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
django使用html模板减少代码代码解析
Dec 12 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
django框架ModelForm组件用法详解
Dec 11 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
python如何查看安装了的模块
Jun 23 Python
python 深度学习中的4种激活函数
Sep 18 Python
基于Python爬取股票数据过程详解
Oct 21 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安全技术之 实现php基本安全
2010/09/04 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python内置数据类型之列表操作
2018/11/12 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python连接PostgreSQL过程解析
2020/02/09 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
应届毕业生求职信
2013/11/30 职场文书
医院办公室主任职责
2013/12/29 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
校本研修个人总结
2015/02/28 职场文书