12 Python面向对象编程:运算符重载
1.1 安装Python2.2 Python开发工具:PyCharm3.3 Python开发工具:VSCode+插件4.4 Python虚拟环境介绍5.5 Python变量6.6 Python运算符和表达式7.7 Python流程控制8.8 Python基本数据结构9.9 Python函数10.10 Python面向对象编程:类和对象以及和Java的对比11.11 Python面向对象编程:三大特性,封装、继承、多态
12.12 Python面向对象编程:运算符重载
13.13 Python面向对象编程:装饰器14.14 Python面向对象编程:反射15.15 Python模块16.16 Python的包以及import和from的使用17.17 Python异常处理(捕获异常、抛出异常、自定义异常)18.18 Python如何操作文件?19.Python 基础学习路线图【有PDF版】本篇是 Python 系列教程第 12 篇,更多内容敬请访问我的 Python 合集
在理解运算符重载之前我们已经知道了什么是方法重载,方法重载就是子类继承父类并且定义了一个和父类一样的方法。
知道了什么是重载,也知道了什么是运算符(加减乘除等),那么运算符重载也很好理解了,其实就是在类里面也定义一些特殊方法,使得调用这些方法能实现类对象的加减乘除。当然方法名不是随意取的,要和运算符对应上。
以下是一些常见的运算符及其对应的特殊方法:
- 加法 (
+
):__add__(self, other)
- 减法 (
-
):__sub__(self, other)
- 乘法 (
*
):__mul__(self, other)
- 除法 (
/
):__truediv__(self, other)
- 求模 (
%
):__mod__(self, other)
- 幂 (
**
):__pow__(self, other[, modulo])
- 比较 (
==
):__eq__(self, other)
- 小于 (
<
):__lt__(self, other)
- 大于 (
>
):__gt__(self, other)
- 反向运算符(例如
a + b
中的b + a
):__radd__(self, other)
等
这里有一个简单的例子,展示了一个类如何重载加法运算符:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
# 创建两个向量实例
v1 = Vector(1, 2)
v2 = Vector(3, 4)
# 使用加法运算符
result = v1 + v2
print(result) # 输出: Vector(4, 6)
在这个例子中,我们定义了一个Vector
类,并实现了__add__
方法来处理加法运算。此外,我们还定义了__repr__
方法以便打印出对象的可读表示形式。关于__repr__
方法的介绍请看文章末尾。
拓展
__repr__
方法不是典型的运算符重载方法,但它确实是一种特殊的方法,用于定义对象的“官方”字符串表示形式。这个方法通常用于调试和开发目的,因为它提供了关于对象的尽可能完整的信息。
当没有定义 __str__
方法时,print()
和 str()
会调用 __repr__
方法来获取对象的字符串表示。即使定义了 __str__
方法,__repr__
也可以被直接调用,比如使用 repr()
函数。
我们在上面的例子中做一个拓展:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __repr__(self):
return f"repr Vector({self.x}, {self.y})"
def __str__(self):
return f"str Vector({self.x}, {self.y})"
# 创建两个向量实例
v1 = Vector(1, 2)
v2 = Vector(3, 4)
# 使用加法运算符
result = v1 + v2
print(result) # 输出: str Vector(4, 6)
print(repr(result)) # 输出:repr Vector(4, 6)
在这个例子中,__repr__
被用来返回一个包含 x
和 y
坐标的字符串,这使得输出更具可读性。
虽然 __repr__
不是用来重载算术或比较运算符的,但它可以被认为是一种形式的“方法重载”,因为它允许你自定义对象如何被转换成字符串形式。如果你有任何关于 __repr__
或者其他特殊方法的具体问题,请随时提问!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」