Python判断对象是否相等及eq函数的讲解

摘要

  • 什么是python对象的标识
  • python对象相等的判断
  • 自定义python对象相等的条件

python对象的标识

python对象标识就是python对象自身的要素,python对象主要有3要素:

  • id:相当于对象在内存中的地址,相当于c的指针,可以用id(对象)来获取。
  • 类型:python的基本对象有Number、String、List、Tuple、Set、Dictionary六种,当然还有对象的实例化,他们的类型就是对象的类名。可以通过type(对象)来获取。
  • 值:对象的值,不解释- -。

对象相等的判断

python中的对象是否相等有两个层面,一个层面是是否是同一个对象,及在内存中是否共用一个内存区域,用is判断,另一个是对象的值是否相等,用==判断。

我目前用的最多的就是python对象的比较,即比较两个python对象是否相等,看个例子:

class student(object):
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def __eq__(self, *args, **kwargs):
    return object.__eq__(self, *args, **kwargs)
like = student("like",25,"male")
xue = student("xue",23,"female")
dong = student("like",25,"male")
print(like is xue) #False
print(like is dong) #False
print(like == dong) #False

这里有两个student类的实例化对象,like和xue很明显是两个不同的对象,他们的不同体现在所占内存地址不同且对象的属性也不同。

like和dong虽然属性相同,但是is和==两种判断的结果也都为false,在实际情况中,我们大多都希望like和dong属性相同,就认为是同一个对象,所以我们需要重写类的eq方法:

class student(object):
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def __eq__(self,other):
    return self.__dict__ == other.__dict__
print(like == dong) #True

调用一个对象的dict方法可以用字典的形式输出其属性列表,由于两个对象的属性相同,所以==运算为True。

自定义python对象相等的条件

当然在实际情况下,可以更灵活的定义两个对象相等的条件,比如名字一样就认为相等。

class student(object):
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def __eq__(self,other):
    return self.name == other.name
like = student("like",25,"male")
dong = student("like",23,"female")
print(like == dong) #True

实际场景

在实际应用中,有一个场景是处理对象是否在list里,不在就加入。

like = student("like",25,"male")
dong = student("like",25,"male")
list1 = []
list1.append(like)
if dong not in list1:
  list1.append(dong)
print(len(list1)) #1

list的in操作就是通过==来判断是否在list中。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Linux后台运行Python程序的几种方法讲解

    1.第一种方法是直接用unhup命令来让程序在后台运行,命令格式如下: unhup python 文件名.py (> ***.log )& 在这个命令中,python指定我们要执行的文件为python文件,后面的文件名.py即是我们要执行的文件.括号内容表示可以将平时输出到控制台中的内容重定向到*.log这个文件中,这个是可选的,如果没有这个,则会默认输出到nohup.out文件中.括号后面你的&表示后台运行. 2.第二种方法是写一个脚本,然后把脚本提交给服务器,让服务器在后台运行脚

  • Python爬虫beautifulsoup4常用的解析方法总结

    摘要 如何用beautifulsoup4解析各种情况的网页 beautifulsoup4的使用 关于beautifulsoup4,官网已经讲的很详细了,我这里就把一些常用的解析方法做个总结,方便查阅. 装载html文档 使用beautifulsoup的第一步是把html文档装载到beautifulsoup中,使其形成一个beautifulsoup对象. import requests from bs4 import BeautifulSoup url = "http://new.qq.com/o

  • Python的UTC时间转换讲解

    UTC时间转换,最终得到的都是UTC时间. 简单来说就是: 时间戳(timestamp) 转换-> UTC显示时间(datetime),使用time.gmtime(timestamp). 显示时间(datetime) 转换-> UTC时间戳(timestamp),使用calendar.timegm(datetime.timetuple()). 注意: VC下相应的接口是gmtime和_mkgmtime. 代码: # -*- coding: gb2312 -*- # UTC时间转换,最终得到的都

  • Python计算时间间隔(精确到微妙)的代码实例

    使用python中的datetime import datetime oldtime=datetime.datetime.now() print oldtime; x=1 while x<10000000: x=x+1 newtime=datetime.datetime.now() print newtime; print u'相差:%s'%(newtime-oldtime) print u'相差:%s微秒'%(newtime-oldtime).microseconds print u'相差:%

  • Python逐行读取文件中内容的简单方法

    项目开发中文件的读写是必不可少的 下面来简单介绍一下文件的读 读文件,首先我们要有文件 那我首先自己创建了一个文本文件password.txt 内容如下: 下面先贴上代码,然后对其进一步解释: # coding:utf-8 path = r"C:\Users\Administrator\Desktop\CSDN博客草稿\文件的读\password.txt" #传入要读的文件路径 file = open(path,"r",encoding="utf-8&qu

  • 使用Python将Mysql的查询数据导出到文件的方法

    mysql官方提供了很多种connector,其中包括python的connector. 下载地址在:http://dev.mysql.com/downloads/connector/python/ 直接安装即可. 在python中: 1. 连接: import mysql.connector cnx = mysql.connector.connect(user='scott', password='tiger', host='127.0.0.1', database='employees')

  • Python常用爬虫代码总结方便查询

    beautifulsoup解析页面 from bs4 import BeautifulSoup soup = BeautifulSoup(htmltxt, "lxml") # 三种装载器 soup = BeautifulSoup("<a></p>", "html.parser") ### 只有起始标签的会自动补全,只有结束标签的会自动忽略 ### 结果为:<a></a> soup = Beautif

  • Python中使用遍历在列表中添加字典遇到的坑

    """ 已知列表li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}] , 定义一个函数,将该列表按照其元素的value 值进行排序,并输出结果 """ 思路很清晰,新建一个列表,然后遍历取出字典的值加入到新的列表中,再通过遍历,赋值字典,使用append方法依次添加到列表,这样就是一个按照value值排续.于是有

  • Python使用paramiko操作linux的方法讲解

    paramiko介绍 paramiko是一个基于python编写的.使用ssh协议的模块,跟xshell和xftp功能类似,支持加密与认证,可以上传下载和访问服务器的文件. 可以利用paramiko模块写服务器脚本,在本地执行,比如持续更新代码,查看日志,批量配置集群等. paramiko 主要包含SSHClient和SFTPClient两个组件: SSHClient ssh服务会话的表示,通常用来执行命令,主要有connect.exec_command.load_system_host_key

  • Python3几个常见问题的处理方法

    1. 编码问题: 遇到了几个字符串转换问题,总结如下: # str to bytes str.encode(s) # bytes to str bytes.decode(b) 判断编码方式可用chardet模块的chardet.detect(content)来协助. 2. char *有地址取内容: strcontent = string_at(addr, -1) 3. 从动态链接库中获取函数并调用ctypes from ctypes import * dll = CDLL("YourAPP.d

随机推荐