迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的重载运算符

作者:迹忆客 最近更新:2023/04/23 浏览次数:

运算符重载意味着改变运算符在不同情况下的行为方式。 它是一种多态性。

通过运算符重载,我们可以为运算符添加额外的含义或功能以执行多个操作。

例如,+ 运算符对整数操作数执行加法。 但是当与字符串操作数一起使用时,它会执行连接,因为 + 运算符被重载了。


Python 中的重载运算符

Python 提供了一种通过 Magic 方法重载具有用户定义数据类型的运算符的方法。 这些是当我们使用与它们关联的运算符时自动调用的特殊方法。

它们也被称为 Dunder 方法,因为它们以双下划线开头和结尾。

比如我们写运算符+的时候,后台会自动调用魔术方法 __add__() 。 因此,如果我们想对某些运算符进行运算符重载,只需要更改其魔术方法的代码即可。


在 Python 中重载 + 运算符

在下面的代码中,我们有一个用户定义的类,我们在其中实现了魔法方法 __add__() 来重载 + 运算符。

当我们写 int1 + int2 时,实际上在后端魔术方法 __add()__ 被调用为 int1.__add__(int2)。 同样的工作也适用于琴弦。

当我们编写 str1 + str2 时,魔术方法在内部被称为 str1.__add__(str2)

示例代码:

#Python 3.x
class MyAddion:
    def __init__(self, a):
        self.a = a
    def __add__(self, b):
        return self.a + b.a
int1 = MyAddion(2)
int2 = MyAddion(2)
str1 = MyAddion("fql")
str2 = MyAddion("jiyik")
print(int1 + int2)
print(str1 + str2)

输出:

#Python 3.x
4
fqljiyik

在 Python 中重载 > 运算符

在这里,我们重载了 MyComp 类中的 > 运算符。 当我们写运算符 > 时,魔术方法 __gt__() 在内部被调用。

所以当我们写 int1 > int2 时,魔术方法 __gt__() 被调用为 int1.__gt__(int2)。 如果条件为真,则此方法返回真; 否则,它返回 false。

示例代码:

#Python 3.x
class MyComp:
    def __init__(self, a):
        self.a = a
    def __gt__(self, b):
        if(self.a>b.a):
            return True
        else:
            return False
int1 = MyComp(5)
int2 = MyComp(3)
if(int1 > int2):
    print(int1.a, "is greater than", int2.a)
else:
    print(int2.a, "is greater than", int1.a)

输出:

#Python 3.x
5 is greater than 3

在 Python 中重载 == 运算符

在这里,我们在类 MyEquality 中重载了相等运算符 ==。 当我们写 int1 == int2 时,内部魔术方法 __eq__() 将被调用为 int1.__eq__(int2)

如果两个操作数相等,则返回 Equal; 否则,它将返回 Not Equal。

示例代码:

#Python 3.x
class MyEquality:
    def __init__(self, a):
        self.a = a
    def __eq__(self, b):
        if(self.a == b.a):
            return "Equal"
        else:
            return "Not equal"
int1 = MyEquality(3)
int2 = MyEquality(3)
print(int1 == int2)

输出:

#Python 3.x
Equal

值得注意的是,在运算符重载的情况下,我们无法更改运算符的操作数数量。 我们不能将一元运算符重载为二元运算符,反之亦然。

例如,我们不能将 ~ invert 运算符(一元运算符)重载为二元运算符。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便