一.__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>

这是一个看起来十分难看的输出,输出的是这对象的类别和地址。但我们可以把这个输出改成自己想要的样子,那就是利用__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:__eq__和__str__函数的使用示例

本文地址: http://www.cppcns.com/jiaoben/python/349898.html

python evaluate函数_Python:__eq__和__str__函数的使用示例相关推荐

  1. python hash函数_Python hash()函数

    python hash函数 Python hash() is one of the built-in function. Today we will look into the usage of ha ...

  2. python数字类型转换函数_Python的数据类型转换函数

    玩蛇网这篇文章给大家介绍关于,Python数据类型的转换函数. Python提供了一些可以把某个值从一种数据类型,转换成为另一种数据类型的内置函数和方法.int函数可以将任何可以转换为整型的值转换为整 ...

  3. python hist函数_Python主要数据探索函数

    Python中用于数据探索的库主要是pandas(数据分析)和 Matplotlib(数据可视化),其中pandas提供了大量的与数据库探索相关的函数,这些数据探索函数壳大致分为统计特征函数与统计绘图 ...

  4. python阶乘匿名函数_python的高阶函数与匿名函数

    一.高阶函数的定义 高阶函数:就是把函数当成参数传递的一种函数,例如: defadd(x,y,f):return f(x)+f(y)print(add(-8,11,abs) 结果:19 解释: 1.调 ...

  5. python中itemgetter函数_Python中的sorted函数以及operator.itemgetter函数

    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2,3] >>> b=op ...

  6. python日期函数_python 时间及日期函数

    本人最近新学python ,用到关于时间和日期的函数,经过一番研究,从网上查找资料,经过测试,总结了一下相关的方法. import time import datetime '''时间转化为时间戳: ...

  7. python拷贝文件函数_Python Set集合,函数,深入拷贝,浅入拷贝,文件处理

    1.Set基本数据类型 a.set集合,是一个无序且不重复的元素集合 classset(object):"""set() -> new empty set obje ...

  8. python中range 函数_Python中的range函数

    本篇介绍range函数的特点及如何灵活运用. 工具/原料 Python3.7.5 Windows7环境 方法/步骤 1 查看range函数的帮助信息, range(stop) range(start, ...

  9. python agg函数_Python Pandas Series.agg()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas Series.agg()用 ...

最新文章

  1. 关于网站更新速度的一点小心得
  2. linux 设备树_嵌入式系统砖家_初识设备树
  3. 前端处理带t的时间_大厂实践:如何优雅的监控前端页面性能
  4. 【计算机网络】数据链路层 : 广域网 ( 广域网概念 | PPP 协议 | PPP 协议功能 | PPP 协议组成 | PPP 协议帧格式 )
  5. libevent中指定使用哪种方法如select
  6. TNN 量化_加量化港美股打新群!
  7. Fedora/CentOS7/RedHat7关闭图形桌面开启文本界面
  8. pycharm Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run
  9. SPSS软件自身案例数据
  10. postgresql 身份证、手机号、营业执照验证脚本
  11. Windows 2008 R2 SP1 离线安装IE11
  12. toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
  13. 软件架构师必需要了解的 saas 架构设计?
  14. 怎样使用思维导图做计划?分享5个思维导图做计划的模板
  15. CT一般扫描参数_CT扫描参数介绍(1)
  16. 大白话:计算机网络——网速
  17. updated beforeUpdate() Updated() 生命周期-销毁阶段 vue的nextTick@stage3---week2--day4-1
  18. 进程调度 优先级c语言,按优先级调度算法实现进程调度的程序
  19. 将一个十进制数转化为二进制数,统计二进制数中1的个数
  20. imshow与显示图像时的全白问题

热门文章

  1. 介绍三种芯片timing model
  2. python基础学习(一)——基础1
  3. nodejs读写ini
  4. 996工作制算什么?还有人是724!
  5. 英语 —— 基础学习
  6. 软件外包项目管理指引
  7. 推送通知/传感器/UIDynamic仿真(推送通知已适配iOS10)
  8. Hadoop分布式集群的安装(图解)
  9. 服务器正文22:linux内核网络模块笔记:收包、发包、内核如何与用户进程协同合作(上)
  10. 那些适合日常使用的开源工具和应用(设计篇)