Python:__eq__和__str__函数的使用示例

 更新时间:2020年09月26日 16:05:51   作者:Geeksongs  
这篇文章主要介绍了Python:__eq__和__str__函数的使用示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下

一.__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__函数的资料请关注脚本之家其它相关文章!

相关文章

  • pycharm 使用tab跳出正在编辑的括号(){}{}等问题

    pycharm 使用tab跳出正在编辑的括号(){}{}等问题

    这篇文章主要介绍了pycharm 使用tab跳出正在编辑的括号(){}{}等问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Python保留数据并删除Excel单元格的函数和公式

    Python保留数据并删除Excel单元格的函数和公式

    在分析处理Excel表格时,我们可能需要使用各种公式或函数对表格数据进行计算,从而分析出更多的信息,但在展示、分享或再利用分析结果时,我们可能需要将含有公式的单元格转换为静态数值,本文将介绍如何使用Python代码批量移除Excel单元格中的公式并保留数值
    2024-10-10
  • python与matlab一些常用函数互转问题

    python与matlab一些常用函数互转问题

    这篇文章主要介绍了python与matlab一些常用函数互转,包括十六进制字节流数据的相关知识,本文通过示例代码给大家讲解的非常详细,需要的朋友可以参考下
    2022-12-12
  • Python中Jieba进行词频统计与关键词提取

    Python中Jieba进行词频统计与关键词提取

    本文主要介绍了Python中Jieba进行词频统计与关键词提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python之打印日志库(logging)

    Python之打印日志库(logging)

    这篇文章主要介绍了Python之打印日志库(logging),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • python 绘制斜率图进行对比分析

    python 绘制斜率图进行对比分析

    这篇文章主要介绍了python 绘制斜率图进行对比分析的实例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • Python字符转换

    Python字符转换

    Python提供了ord和chr两个内置的函数,用于字符与ASCII码之间的转换。
    2008-09-09
  • python 列表、字典和集合的添加和删除操作

    python 列表、字典和集合的添加和删除操作

    今天小编就为大家分享一篇python 列表、字典和集合的添加和删除操作,有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python实现淘宝秒杀功能的示例代码

    Python实现淘宝秒杀功能的示例代码

    这篇文章主要介绍了Python实现淘宝秒杀功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 30分钟搭建Python的Flask框架并在上面编写第一个应用

    30分钟搭建Python的Flask框架并在上面编写第一个应用

    这篇文章主要介绍了如何搭建Python的Flask框架并在上面编写一个简单的登录模版应用,代码数量少、充分体现了Flask框架的轻量与开发高效的特点,需要的朋友可以参考下
    2015-03-03

最新评论