加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

什么是运算符重载 Python可重载运算符有哪几种

发布时间:2023-05-11 10:50:59 所属栏目:语言 来源:
导读:前面章节介绍了 Python 中的各个序列类型,每个类型都有其独特的操作方法,例如列表类型支持直接做加法操作实现添加元素的功能,字符串类型支持直接做加法实现字符串的拼接功能,也就是说,同样的运算符对于不同序列

前面章节介绍了 Python 中的各个序列类型,每个类型都有其独特的操作方法,例如列表类型支持直接做加法操作实现添加元素的功能,字符串类型支持直接做加法实现字符串的拼接功能,也就是说,同样的运算符对于不同序列类型的意义是不一样的,这是怎么做到的呢?

其实在 Python 内部,每种序列类型都是 Python 的一个类,例如列表是 list 类,字典是 dict 类等,这些序列类的内部使用了一个叫作“重载运算符”的技术来实现不同运算符所对应的操作。

所谓重载运算符,指的是在类中定义并实现一个与运算符对应的处理方法,这样当类对象在进行运算符操作时,系统就会调用类中相应的方法来处理。

这里给大家举一个与重载运算符相关的实例:

class MyClass: #自定义一个类

def __init__(self, name , age): #定义该类的初始化函数

self.name = name #将传入的参数值赋值给成员交量

self.age = age

def __str__(self): #用于将值转化为字符串形式,等同于 str(obj)

return "name:"+self.name+";age:"+str(self.age)

 

__repr__ = __str__ #转化为供解释器读取的形式

 

def __lt__(self, record): #重载 self<record 运算符

if self.age < record.age:

return True

else:

return False

def __add__(self, record): #重载 + 号运算符

return MyClass(self.name, self.age+record.age)

myc = MyClass("Anna", 42) #实例化一个对象 Anna,并为其初始化

mycl = MyClass("Gary", 23) #实例化一个对象 Gary,并为其初始化

print(repr(myc)) #格式化对象 myc,

print(myc) #解释器读取对象 myc,调用 repr

print (str (myc)) #格式化对象 myc ,输出"name:Anna;age:42"

print(myc < mycl) #比较 myc<mycl 的结果,输出 False

print (myc+mycl) #进行两个 MyClass 对象的相加运算,输出 "name:Anna;age:65"

输出结果为:

name:Anna;age:42

name:Anna;age:42

name:Anna;age:42

False

name:Anna;age:65

这个例子中,MyClass 类中重载了 repr、str、<、+ 运算符,并用 MyClass 实例化了两个对象 myc 和 mycl。

通过将 myc 进行 repr、str 运算,从输出结果中可以看到,程序调用了重载的操作符方法 __repr__ 和 __str__。而令 myc 和 mycl 进行 < 号的比较运算以及加法运算,从输出结果中可以看出,程序调用了重载 < 号的方法 __lt__ 和 __add__ 方法。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!