网站首页 > 技术文章 正文
假设你有一个需求,就是判断两个字符串是否相同,这里要求不区分大小写
你可以定义一个Word类。然后直接添加一个equals方法来比较两个字符串是否一致,忽略大小写,代码如下:
class Word():
def __init__(self,text):
self.text = text
def equals(self,other_word):
return self.text.lower() == other_word.text.lower()
再创建三个字符串
f = Word('ha')
k = Word('Ha')
s=Word('jk')
那么我们可以直接调用equals方法进行比较
>> f.equals(k)
True
>> f.equals(s)
False
这里我们成功的在类中定义了equals方法实现了字符串的比较。
但是我们之前比较两个对象都是直接通过a==b,这样的方式进行比较的话是不是更加优雅呢
那么该怎么定义我们的类来实现这种方式呢?这个时候,我们就可以使用魔法方法__eq__了,
魔法方法__eq__
在Python 中,__eq__是用于实现“等于”(==)比较运算符的特殊方法。__eq__方法接受两个参数:self(对象本身)和other(要比较的另一个对象)。这个方法返回一个布尔值,表示两个对象是否相等。
Python在使用==运算符时,会自动调__eq__方法。
通过定义__eq__方法,你可以自定义对象的相等性逻辑,使得两个对象可以通过==运算符进行比较。
那么这里在自定义类的时候,我们重写__eq__魔法方法,以实现不区分大小写。
我们可以进行试试:
class Word():
def __init__(self,text):
self.text = text
def equals(self,other_word):
return self.text.lower() == other_word.text.lower()
def __eq__(self, other):
return self.text.lower() == other.text.lower()
我们验证一下:
f = Word('ha')
k = Word('Ha')
s=Word('jk')
>> f==k
True
>> f ==s
False
注意事项
- 类型检查:在__eq__方法中,我们使用isinstance进行类型检查,确保只比较相同类型的对象
- 性能考虑:__eq__方法的性能会直接影响到数据结构如集合(set)和字典(dict)的行为,因此要注意避免不必要的性能损失
为了确保比较的对象类型相同,我们需要对类型进行判断,代码如下:
class Word():
def __init__(self,text):
self.text = text
def equals(self,other_word):
return self.text.lower() == other_word.text.lower()
def __eq__(self, other):
if not isinstance(other,Word):
return NotImplemented
return self.text.lower() == other.text.lower()
和比较相关的魔法方法
在Python中,比较操作通常是通过比较运算符(如==、!=、<、>、<=、>=)实现的,这些运算符可以直接用于各种数据类型(如整数、浮点数、字符串等)的比较,除了上面的__eq__魔法方法,其他的比较运算符皆有对应的魔法方法:
方法名 | 使用 |
__ne__(self,other) | self != other |
__lt__(self,other) | self < other |
__gt__(self,other) | self > other |
__le__(self,other) | self <= other |
__ge__(self,other) | self >= other |
- 上一篇: 什么是函数(Python
- 下一篇: 「每日一练」巧用python找出1000以内的所有完数
猜你喜欢
- 2025-05-27 Python6大基础运算符,看完这篇之后会让你有一个彻底认识
- 2025-05-27 SymPy:如何用 Python 求解微积分
- 2025-05-27 Python编程术语词汇表(一)
- 2025-05-27 Python 中关于除法的三种运算符
- 2025-05-27 python类杂谈,self 到底是什么
- 2025-05-27 为什么计算机中0.1+0.2不等于0.3?
- 2025-05-27 Python基础学习笔记之运算符
- 2025-05-27 「每日一练」巧用python找出1000以内的所有完数
- 2025-05-27 什么是函数(Python
- 2025-05-27 python编程学习系列:求平方根
- 258℃Python短文,Python中的嵌套条件语句(六)
- 258℃python笔记:for循环嵌套。end=""的作用,图形打印
- 257℃PythonNet:实现Python与.Net代码相互调用!
- 252℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 107℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 83℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)