📅  最后修改于: 2020-01-17 11:33:48             🧑  作者: Mango
运算符重载意味着提供超出其预定义操作含义的扩展含义。例如,运算符+用于添加两个整数以及连接两个字符串并合并两个列表。这是可以实现的,因为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
输出:
ob1小于ob2
相等
运算符 | 魔术方法 |
---|---|
+ | __add __(自己,其他) |
– | __sub __(自己,其他) |
* | __mul __(其他) |
/ | __truediv __(自己,其他) |
// | __floordiv __(自己,其他) |
% | __mod __(自己,其他) |
** | __pow __(自己,其他) |
运算符 | 魔术方法 |
---|---|
< | __lt __(自己,其他) |
> | __gt __(自己,其他) |
<= | __le __(自己,其他) |
> = | __ge __(自己,其他) |
== | __eq __(自己,其他) |
!= | __ne __(自己,其他) |
运算符 | 魔术方法 |
---|---|
-= | __isub __(自己,其他) |
+ = | __iadd __(自己,其他) |
* = | __imul __(自己,其他) |
/ = | __idiv __(自己,其他) |
// = | __ifloordiv __(自己,其他) |
%= | __imod __(自己,其他) |
** = | __ipow __(自己,其他) |
运算符 | 魔术方法 |
---|---|
– | __neg __(自己,其他) |
+ | __pos __(自己,其他) |
〜 | __invert __(自己,其他) |