栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

儿童python教程176:什么是运算符重载,Python可重载运算符有哪些?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

儿童python教程176:什么是运算符重载,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 输出结果为:

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__ 方法。

那么,Python 类支持对哪些方法进行重载呢?这个给大家提供一个表格(表 1),列出了 Python 中常用的可重载的运算符,以及各自的含义。
 
表 1 Python 常用重载运算符
重载运算符 含义
__new__ 创建类,在 __init__ 之前创建对象
__init__ 类的构造函数,其功能是创建类对象时做初始化工作。
__del__  析构函数,其功能是销毁对象时进行回收资源的操作
__add__ 加法运算符 +,当类对象 X 做例如 X+Y 或者 X+=Y 等操作,内部会调用此方法。但如果类中对 __iadd__ 方法进行了重载,则类对象 X 在做 X+=Y 类似操作时,会优先选择调用 __iadd__ 方法。
__radd__ 当类对象 X 做类似 Y+X 的运算时,会调用此方法。
__iadd__ 重载 += 运算符,也就是说,当类对象 X 做类似 X+=Y 的操作时,会调用此方法。
__or__ “或”运算符 |,如果没有重载 __ior__,则在类似 X|Y、X|=Y 这样的语句中,“或”符号生效
__repr__,__str__ 格式转换方法,分别对应函数 repr(X)、str(X)
__call__ 函数调用,类似于 X(*args, **kwargs) 语句
__getattr__ 点号运算,用来获取类属性
__setattr__ 属性赋值语句,类似于 X.any=value
__delattr__ 删除属性,类似于 del X.any
__getattribute__ 获取属性,类似于 X.any
__getitem__ 索引运算,类似于 X[key],X[i:j]
__setitem__ 索引赋值语句,类似于 X[key], X[i:j]=sequence
__delitem__  索引和分片删除
__get__, __set__, __delete__ 描述符属性,类似于 X.attr,X.attr=value,del X.attr
__len__  计算长度,类似于 len(X)
__lt__,__gt__,__le__,__ge__,__eq__,__ne__  比较,分别对应于 <、>、<=、>=、=、!= 运算符。
__iter__,__next__ 迭代环境下,生成迭代器与取下一条,类似于 I=iter(X) 和 next()
__contains__ 成员关系测试,类似于 item in X
__index__  整数值,类似于 hex(X),bin(X),oct(X)
__enter__,__exit__ 在对类对象执行类似 with obj as var 的操作之前,会先调用 __enter__ 方法,其结果会传给 var;在**终结束该操作之前,会调用 __exit__ 方法(常用于做一些清理、扫尾的工作)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/805927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号