网站首页 > 技术文章 正文
假设你有一个需求,就是判断两个字符串是否相同,这里要求不区分大小写
你可以定义一个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 |
猜你喜欢
- 2025-05-03 如何在 Python 中创建一个不可变的字典 - Adam Johnson
- 2025-05-03 Python中while循环详解(python写while循环)
- 2025-05-03 详细介绍一下Python中的BeautifulSoup库的使用?
- 2025-05-03 python魔法方法:__repr__与__str__
- 2025-05-03 Python 编译加速技术(python编译速度)
- 2025-05-03 Python 运算符大揭秘(python运算符代码)
- 2025-05-03 Python | range()详解(python 中 range)
- 2025-05-03 Python6大基础运算符,看完这篇之后会让你有一个彻底认识
- 2025-05-03 Python 3 中 “1000000000000000 in range(1000000000000001)” 为何快
- 2025-05-03 「Python编程规范」语句分隔符号(python用什么作为分隔符)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)