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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
快速了解python leveldb
Jan 18 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python Dataframe常见索引方式详解
May 27 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实现的DES加密解密类定义与用法示例
2020/11/02 PHP
简单的JS多重继承示例
2008/03/13 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
vue的基本用法与常见指令
2017/08/15 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
python实现数组插入新元素的方法
2015/05/22 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
如何使用python切换hosts文件
2020/04/29 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
大学本科毕业生求职信范文
2013/12/18 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
社团活动总结模板
2014/06/30 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
浅析JavaScript中的变量提升
2022/06/01 Javascript