迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

Django 返回 JSON

发布时间:2023/05/04 浏览次数:106 分类:Python

在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。

在 Django 中创建对象

发布时间:2023/05/04 浏览次数:59 分类:Python

本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。

在 Django 中为多项选择创建字段

发布时间:2023/05/04 浏览次数:75 分类:Python

在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便