Python判断对象是否相等及eq函数的讲解
作者:Lee_Tech 发布时间:2022-04-13 03:15:22
摘要
什么是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中。
来源:https://blog.csdn.net/lk7688535/article/details/80975688


猜你喜欢
- 前言:通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器。一个简单的端口扫描器
- 前言InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的
- 如下所示:# coding:utf-8'''求两个字符串的最长公共子串思想:建立一个二维数组,保存连续位相同与否的状
- python安装第三方库大都是通过pip命令安装,这个命令确实是很简便的,而对于每个独立的项目来说,需要用到的库或许会不同,如果删除或更新原
- 前言提示:在管理服务器的过程中,发现有很多服务器在启动的过程中默认以PXE方式启动,这就导致我们无法将PXE装机程序放开到所有的交换机端口中
- 本文实例讲述了Python使用PyCrypto实现AES加密功能。分享给大家供大家参考,具体如下:#!/usr/bin/env python
- varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大
- 微信小程序分享效果:js代码:page({/** * 用户点击分享按钮或右上角分享 */ onShareAppMessage: functi
- 问题如下python pip安装模块提示错误failed to create process原因:报这个错误的原因,是因为python的目录
- 最近在学爬虫时发现许多网站都有自己的反爬虫机制,这让我们没法直接对想要的数据进行爬取,于是了解这种反爬虫机制就会帮助我们找到解决方法。常见的
- 将django语法和sql对应一下,希望对大家有所帮助查询单个列的值story.object.values_list("url&q
- 导语小伙伴们大家好~如今的游戏可谓是层出不穷,NBA 2K系列啊,FIFA系列啊更是经典中的经典,不过小编发现,赛车游戏也是深受大家欢迎啊,
- import random, stringclass C(object): passdef danger
- 方式一:叠加文字水印最简单的一种方式是,在图片上绘制半透明文本来实现水印效果。主要用到Figure.text函数参数类型说明x, yfloa
- 基于 RSA 加密算法的接口鉴权方案假设接口调用者是客户端,接口提供方是服务端,则此方案存在以下规则:客户端需要使用 RSA 算法(1024
- JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。说白了就是能
- 下面继续为大家带来XHTML与HTML兼容的16条指引!1.避免将页面声明为XML类型,页面使用UTF-8或者UTF-16字符集。2.在空元
- 有一个需求就是需要对url进行进一步的划分得到详细的各个字段信息,下面是简单的实现:#!/usr/bin/python# -*- codin
- 搭建vue的开发环境:1、必须要安装nodejs2、搭建vue的开发环境 ,安装vue的脚手架工具 官方命令行工具npm install -
- 我就废话不多说了,大家还是直接看代码吧~one = tf.ones_like(label)zero = tf.zeros_like(labe