比较python类的两个instance(对象) 是否相等
http://www.yihaomen.com/article/python/281.htm
比较python类的两个instance(对象) 是否相等
作者:轻舞肥羊 日期:2012-10-25
但在实际的开发过程中,要比较两个对象是否相等,并不是通过内存地址来判断的,而是通过这两个对象的部分属性值,或者全部属性值来对比判断的。
假设有一个职员Class, 我们分别创建了两个对象
class Staff(object):
def __init__(self,id,name,sex):
self.id=id
self.name=name
self.sex=sex
我们这样认为,如果id 相同,则表示两个对象相等,id姑且表示身份证编号吧,如果身份证编号相同,那么肯定是同一人,在实际的项目中会遇到这样的情况。
创建对象并查看各自的内存地址
staff1=Staff("123456","张三","男")
staff2=Staff("123456","李四","女")
print id(staff1),id(staff2)
#12327248 12327184
结果很明显,在不同的内存地址,这时候如果判断 staff1==staff2 ,结果肯定是 False。
如何满足我们的需要,只要id 相同的对象,就认为是相等的对象呢,有如下几种方法:
一.重载 Staff Class 的 __eq__ 方法
class Staff(object):
def __init__(self,id,name,sex):
self.id=id
self.name=name
self.sex=sex
def __eq__(self,other):
return self.id==other.id
staff1=Staff("123456","张三","男")
staff2=Staff("123456","李四","女")
print id(staff1),id(staff2)
print staff1==staff2
#True
结果返回为 true,说明是相等的,但在计算机中的内存地址,肯定是不一样的。这里重载了__eq__方法,当然你还可以 增加比较条件,例子中只对比了id. 用同样的方法,还可以实现 两个对象相加等操作,重载__add__ 方法。
2.直接属性值对比来实现
staff1=Staff("123456","张三","男")
staff2=Staff("123456","李四","女")
print id(staff1),id(staff2)
print staff1.__dict__
print staff2.__dict__
if staff1.__dict__['id']==staff2.__dict__['id']:
print 'yes,equal'
你会发现,这样也是可以的,同样也可以对比多个属性,这里的重点是用到了python Class 的 __dict__系统内置方法来实现。
转载于:https://www.cnblogs.com/saolv/p/9839626.html
比较python类的两个instance(对象) 是否相等相关推荐
- python类私有函数_python-面向对象-14-私有方法
1私有方法说明 python对于类的成员没有严格的访问控制限制,这与强类型面向对象语言有区别.关于私有属性和私有方法,有如下要点: 通常我们约定,两个下划线开头的方法属于是私有的(private)方法 ...
- 根据创建的School类创建两个学校对象,为对象属性赋值,并调用相应方法。
//School类 //学校类 public class School { //属性:学校名 教室数目 学生数量 String schoolName; int class ...
- 定义一个Circle类,根据圆的半径求周长和面积,再由Circle类创建两个圆对象,其半径分别为5和10,要求输出各自的周长和面积。
class Circle:pi=3.14def __init__(self,radius):self.r=radiusdef girth(self):C=Circle.pi*self.r*2print ...
- 如何在python中找到两个日期时间对象之间的时差?
本文翻译自:How do I find the time difference between two datetime objects in python? 如何分辨两个datetime对象之间的时 ...
- 【Python基础】07、Python类与面向对象
一.面向对象编程(OOP) 程序=算法+数据结构=指令+数据 1.代码可以选择以指令为核心或以数据为核心进行编写 两种范型: 以指令为核心:围绕"正在发生什么"进行编写 面向过程编 ...
- python类、对象、方法、属性之类与对象笔记
为什么80%的码农都做不了架构师?>>> python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...
- Python类与对象实验
一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类和对象_Python类和对象
python类和对象 Python is an object-oriented programming language. Python Classes and Objects are the cor ...
最新文章
- @Autowired静态变量
- 奇迹暖暖服务器不稳定,闪耀暖暖用土豆当服务器?开服仅半小时就崩溃,无数玩家疯狂吐槽...
- 基于Lock的卖票和生产者消费者案例
- ip地址合法性检查 php,php检查验证IP为有效IP地址函数
- Python基础(19)_异常处理
- 互联网分布式微服务云平台规划分析--SSO单点登录系统
- 利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能)
- Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战
- java jtextfield 密码_Java Swing实战(三)文本组件JTextField和密码组件JPasswordField
- Python Flask Web 第十一课 —— 使用 Flask-SQLAlchemy 管理数据库
- kalilinux装到u盘上的弊端_暗黑系统安装盘高达14G!kali linux在它面前顿然失色
- E-Prime教程 | 打mark标记
- 关于U盘病毒autorun.inf更改文件夹属性为系统文件夹并隐藏文件夹
- 网络电视机顶盒的工作原理
- (17)全民小视频引流脚本模块化开发11-关注用户的粉丝By飞云脚本学院
- 制作游戏3D模型都有哪些步骤流程
- 关于Inter漏洞“熔断”的论文翻译(三)(完)
- 安卓Native Memory Leak(本地服务内存泄露)分析
- C语言:成绩等级划分!
- 它来啦,它来啦!三子棋小游戏来啦!!!
热门文章
- oracle管理认证方式,关于Oracle数据库管理员认证方法简述
- php服务器 下载,php实现从服务器下载文件
- java数组螺旋矩阵从上到下_Java-基础编程(螺旋矩阵乘法表)
- PHP使用Switch语句判断星座,PHP的switch判断语句的“高级”用法详解 用switch语句怎样判断成绩的等级...
- 深度学习(6)TensorFlow基础操作二: 创建Tensor
- 【算法竞赛学习】资金流入流出预测-挑战Baseline_数据探索与分析1
- vim 命令_Vim 操作命令手册
- 『数据库』震惊,某博主为吸引眼球拿出压箱底SQL总结,如果你没看那就吃亏了!(超级详细的SQL基础,你还不会的话就别学数据库了)
- CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
- 对Android源码分析总结(Z)