[python]魔术方法大全(二)-- 比较篇

本文详细介绍了Python中的比较魔术方法,包括相等、不等、大于、小于、大于等于和小于等于的实现原理。通过自定义这些魔术方法,可以让自定义类支持丰富的比较操作。文中还探讨了哈希值和布尔值转换的魔术方法,帮助读者理解Python对象的比较逻辑。
摘要由CSDN通过智能技术生成

引述

image.png

print([1, 2] == [1, 2])
print(2 > 5)
print("a" <= "b")

输出结果为:

True
False
True

在python中我们经常会比较两个数据结构是否相等,或者比较两个数据结构的大小叫做rich comparison。

rich comparison一共包含了六个操作符。

image.png

在python的内置数据结构中,比如说dict,或者list,尤其是integer、string、float,它们的rich comparison都是有良好的定义的。

然而,有时候对于我们自己写的数据结构,我们也希望利用这些比较运算符。

而比较的逻辑实现,我们就是通过魔术方法来完成的。

我们举个例子:

class Date:
    def __init__(self, year, month, date):
        self.year = year
        self.month = month
        self.date = date


x = Date(2022, 2, 22)
y = Date(2022, 2, 22)
print(x == y)

输出结果为:

False

在python中,当你没有去写一个类的比较逻辑的时候,它默认比较两个对象的是否相等的方法是会默认调用object.__eq__方法,默认比较两个对象的地址(id),默认调用了is

python中常见的比较魔术方法

__eq__魔术方法

__eq__ 是 Python 中一个重要的魔术方法,它用于判断两个对象是否相等。

__eq__ 方法默认情况下是比较两个对象的内存地址是否相等,即 id(self) == id(other)。如果我们想让自定义的类支持比较操作,就需要自定义 __eq__ 方法。

class Date:
    def __init__(self, year, month, date):
        self.year = year
        self.month = month
        self.date = date

    def __eq__(self, other):
        print("__eq__")
        return self.year == other.year and self.month == other.month and self.date == other.date


x = Date(2022, 2, 22)
y = Date(2022, 2, 22)
print(x == y)
print(x != y)

输出结果为:

__eq__
True
__eq__
False

这里我们并没有定义不等于,python默认调用了__eq__后取反。

__ne__魔术方法

__ne__是Python的一个魔术方法,用于比较两个对象是否不相等。它是“not equal”的缩写,与__eq__(等于)方法相对应。当使用!=操作符时,解释器就会调用__ne__方法来执行不相等的比较。

__ne__方法的默认实现是返回not self == other。因此,如果你在类中定义了__eq__方法,那么你应该同时定义__ne__方法,以确保比较的正确性。

class Date:
    def __init__(self, year, month, date):
        self.year = year
        self.month = month
        self.date = date

    def __eq__(self, other):
        print("__eq__")
        return self.year == other.year and self.month == other.month and self.date == other.date

    def _
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值