什么是运算符重载,Python可重载运算符有哪些?

简介: 本文详解Python运算符重载机制:通过定义特殊方法(如`__add__`、`__lt__`等),使同一运算符在不同类中实现差异化行为。结合实例演示如何自定义类的`+`、`<`等操作,并附常用重载方法速查表,助你深入理解Python面向对象核心特性。(239字)

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


那么,Python 类支持对哪些方法进行重载呢?这个给大家提供一个表格,列出了 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__ 方法(常用于做一些清理、扫尾的工作)


相关文章
|
8天前
|
开发工具 C++ Windows
【VC++】微软Visual C++运行库:覆盖2017-2026所有版本(2026最新)
Visual C++ Redistributable是微软官方运行时库,为VC++编译的程序提供必需DLL。缺它会导致软件报错、闪退。v14(2017–2026)为最新版,推荐x86+x64双架构安装;旧版(2005–2015)可共存,老软件常需单独安装。
|
19天前
|
IDE 数据可视化 开发工具
2026最新Thonny(Python IDE)使用全攻略教程(附安装包+图文步骤)
Thonny是爱沙尼亚塔尔图大学开发的Python初学者专用IDE,界面极简、内置Python解释器,无需配置即可开写;其可视化调试功能可直观查看变量变化,大幅降低学习门槛。支持Win/macOS/Linux,最新版为5.x。
|
25天前
|
机器学习/深度学习 IDE 数据可视化
【2026最新】Spyder安装和使用保姆级教程(附安装包+图文步骤)
Spyder(Scientific Python Development Environment)是一款免费开源的Python IDE,专为数据科学、科学计算与机器学习设计。它融合代码编辑、调试、变量浏览与IPython交互式控制台、数据可视化等功能,界面类MATLAB,开箱即用NumPy、Pandas、Matplotlib等库,Anaconda用户可一键启用。(239字)
|
23天前
|
数据安全/隐私保护 Windows
【2026最新】用WinSCP上传下载服务器文件(图解版,0基础也能看懂)
WinSCP是Windows平台免费开源的文件传输工具,支持SFTP、FTP、SCP、WebDAV等协议,提供双面板操作、远程文件编辑、目录同步、脚本自动化等功能,安装便捷(含便携版),中文界面友好,是FileZilla的强力替代方案。
|
19天前
|
机器学习/深度学习 IDE 数据挖掘
2026最新Jupyter Notebook安装使用保姆级教程(附安装包+图文步骤)
Jupyter Notebook是基于网页的交互式编程工具,支持Python、R等数十种语言。以单元格为单位执行代码,即时显示结果,融合代码、文字与图表,适合数据分析、教学及报告编写。推荐通过Anaconda一键安装。
|
23天前
|
SQL Linux 数据库
【2026最新】SQLiteStudio下载安装保姆级教程(附安装包+图文步骤)
SQLiteStudio是一款免费开源、轻量跨平台的SQLite数据库管理工具,支持Windows/macOS/Linux,提供免安装便携版。具备图形化建表、可视化数据编辑、SQL编辑器、导入导出(CSV/JSON/Excel)、正则搜索等功能,操作直观高效,适合各类用户。
|
30天前
|
iOS开发 MacOS Windows
【实测好用】Multisim软件安装汉化教程(附安装包+激活图文步骤)
Multisim是NI(现属Emerson)推出的电路仿真软件,基于SPICE引擎,支持模拟/数字/混合信号电路仿真。操作直观、元器件库丰富、分析功能全面(直流/交流/瞬态/噪声等),广泛用于高校电子教学与电路设计验证,是电子信息专业必备工具。(239字)
|
26天前
|
关系型数据库 MySQL 数据库
超详细MySQL安装与配置零基础教程(Windows版)
本文为新手量身打造的Windows版MySQL 8.0零踩坑安装指南:涵盖官方下载、卸载残留、Developer Default一键安装、关键参数配置(3306端口、root密码、开机自启)、环境变量设置及全流程验证,步骤清晰、避坑务实,跟着操作即可一次成功。
|
13天前
|
IDE 网络安全 开发工具
【全网最详细】TortoiseGit安装汉化和配置保姆级教程(附安装包+汉化包)
TortoiseGit是Windows平台开源免费的Git图形化客户端,集成于资源管理器右键菜单,零命令操作。支持图标覆盖层直观显示文件状态,无需记忆git命令,兼容所有IDE,学习成本低,适合个人及团队版本管理。(239字)
|
19天前
|
Java 应用服务中间件 Apache
2026最新Tomcat安装和配置保姆级教程(附安装包+图文步骤)
Apache Tomcat是开源轻量级Java Web服务器与Servlet容器,支持Servlet、JSP、WebSocket等规范。解压即用,部署.war包即可运行Web应用,广泛用于开发与测试。推荐使用Tomcat 10.1.x或11.x(需JDK 11+),注意jakarta.*命名空间迁移。