Bootstrap

python中的运算符重载_Python中的运算符重载

运算符重载意味着提供超出其预定义操作含义的扩展含义。例如,运算符+用于添加两个整数以及连接两个字符串并合并两个列表。这是可以实现的,因为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解释 […]...

;