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正则表达式匹配ip地址实例
Oct 09 Python
Python中实现对list做减法操作介绍
Jan 09 Python
python 爬取微信文章
Jan 30 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
Python中datetime模块参考手册
Jan 13 Python
python通过tcp发送xml报文的方法
Dec 28 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
如何在Windows中安装多个python解释器
Jun 16 Python
如何在python中判断变量的类型
Jul 29 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
跟老齐学Python之list和str比较
2014/09/20 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
详解django中自定义标签和过滤器
2017/07/03 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
解决DataFrame排序sort的问题
2018/06/07 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
详解python解压压缩包的五种方法
2019/07/05 Python
Python笔记之观察者模式
2019/11/20 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
自我推荐信范文
2014/05/09 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers