运算符重载意味着提供超出其预定义操作含义的扩展含义。例如,运算符+用于添加两个整数以及连接两个字符串并合并两个列表。这是可以实现的,因为int类和str类会重载’+’运算符。您可能已经注意到,相同的内置运算符或函数对不同类的对象显示不同的行为,这称为运算符重载。
# Python程序,展示运算符的重载
print(1 + 2)
# 两个string相加
print("芒果"+"For")
# 两个数的乘积
print(3 * 4)
# 重复字符串
print("芒果"*4)
输出:
3
芒果For
12
芒果芒果芒果芒果
如何在Python中重载运算符
考虑到我们有两个对象,并且必须使用二进制“ +”运算符添加两个对象,这会引发错误,因为编译器不知道如何添加两个对象。因此,我们为运算符定义了一种方法,该过程称为运算符重载。
我们可以重载所有现有的运算符,但不能创建新的运算符。为了执行运算符重载,Python提供了一些特殊的函数或魔术函数,当与该特定的运算符相关联时,这些函数会自动调用。例如,当我们使用+运算符时,__add__将自动调用magic方法,其中定义了+运算符的操作。
在Python中重载Binary +运算符:
当我们对用户定义的数据类型使用运算符时,会自动调用与该运算符关联的特殊函数或魔术函数。更改运算符的行为就像更改方法或函数的行为一样简单。您可以在类中定义方法,并且运算符将根据方法中定义的行为进行工作。当我们使用+运算符时,__add__会自动调用magic方法,其中定义了+运算符的操作。通过更改此魔术方法的代码,我们可以为+运算符赋予其他含义。
代码1:
# Python程序,展示重载Binary +运算符
class A:
def __init__(self, a):
self.a = a
# 两个对象相加
def __add__(self, o):
return self.a + o.a
ob1 = A(1)
ob2 = A(2)
ob3 = A("芒果")
ob4 = A("For")
print(ob1 + ob2)
print(ob3 + ob4)
输出:
3
芒果For
代码2:
# Python程序,展示如何使用+运算符重载计算两个复数的和
class complex:
def __init__(self, a, b):
self.a = a
self.b = b
# 两个对象相加
def __add__(self, other):
return self.a + other.a, self.b + other.b
def __str__(self):
return self.a, self.b
Ob1 = complex(1, 2)
Ob2 = complex(2, 3)
Ob3 = Ob1 + Ob2
print(Ob3)
输出:
(3、5)
重载Python中的比较运算符:
# 重载Python中的比较运算符
class A:
def __init__(self, a):
self.a = a
def __gt__(self, other):
if(self.a>other.a):
return True
else:
return False
ob1 = A(2)
ob2 = A(3)
if(ob1>ob2):
print("ob1大于ob2")
else:
print("ob2大于ob1")
输出:
ob2大于ob1
重载相等且小于运算符:
# Python重载相等且小于运算符
class A:
def __init__(self, a):
self.a = a
def __lt__(self, other):
if(self.a
return "ob1小于ob2"
else:
return "ob2小于ob1"
def __eq__(self, other):
if(self.a == other.a):
return "相等"
else:
return "不相等"
ob1 = A(2)
ob2 = A(3)
print(ob1 < ob2)
ob3 = A(4)
ob4 = A(4)
print(ob1 == ob2)
输出:
ob1小于ob2
相等
Python魔术方法或用于运算符重载的特殊函数
二元运算符:
运算符
魔术方法
+
__add __(自己,其他)
–
__sub __(自己,其他)
*
__mul __(其他)
/
__truediv __(自己,其他)
//
__floordiv __(自己,其他)
%
__mod __(自己,其他)
**
__pow __(自己,其他)
比较运算符:
运算符
魔术方法
<
__lt __(自己,其他)
>
__gt __(自己,其他)
<=
__le __(自己,其他)
> =
__ge __(自己,其他)
==
__eq __(自己,其他)
!=
__ne __(自己,其他)
分配运算符:
运算符
魔术方法
-=
__isub __(自己,其他)
+ =
__iadd __(自己,其他)
* =
__imul __(自己,其他)
/ =
__idiv __(自己,其他)
// =
__ifloordiv __(自己,其他)
%=
__imod __(自己,其他)
** =
__ipow __(自己,其他)
一元运算符:
运算符
魔术方法
–
__neg __(自己,其他)
+
__pos __(自己,其他)
〜
__invert __(自己,其他)
0
相关文章:Python中的语句、缩进和注释 语句 用源代码编写的用于执行的指令称为语句。Python编程语言中有不同类型的语句,例如Assignment语 […]...
Python输入和C++, Java速度对比 Python是一种非常人性化的语言,唯一的缺点就是速度慢。与C,C++和Java相比,它要慢得多。在码平台上, […]...
在C / C++,Python,PHP和Java中交换两个变量 如何在不使用库函数的情况下交换两个变量? Python:在Python中,有一个简单且语法简洁的结构来交换变量 […]...
Python中的Inplace运算符| 1(iadd(),isub(),iconcat()…) Python在其定义中提供了执行就地操作的方法,即使用“ 运算符 “模块在单个语句中进行赋值和计算 […]...
Python | 生成器表达式 在Python中,要创建迭代器,我们可以同时使用常规函数和生成器。生成器的编写就像普通函数一样,但是我们使用y […]...
Python中的类和实例属性 类属性 类属性属于类本身,它们将由所有实例共享。为了清晰起见,此类属性通常在顶部的类正文部分中定义。 # Py […]...
Python | 使用pyqrcode模块生成QR码 让我们看看如何使用pyqrcode模块在Python中生成QR代码。 pyqrcode模块是一个QR码生成器。 […]...
在Python中重新加载模块 reload()重新加载先前导入的模块。如果您已使用外部编辑器编辑了模块源文件,并且想在不离开Python解释 […]...