Python 中的重载运算符
运算符重载意味着改变运算符在不同情况下的行为方式。 它是一种多态性。
通过运算符重载,我们可以为运算符添加额外的含义或功能以执行多个操作。
例如,+
运算符对整数操作数执行加法。 但是当与字符串操作数一起使用时,它会执行连接,因为 + 运算符被重载了。
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 运算符(一元运算符)重载为二元运算符。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
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 中进行多项选择。