Python 特殊方法名称详解
在 Python 中,特殊方法(也称为魔术方法)是一些具有特殊名称的方法,它们以双下划线开头和结尾,例如 __init__
和 __str__
。这些方法在 Python 的对象模型中扮演着重要的角色,它们允许我们自定义类的行为,使其能够像内置类型一样工作。本文将详细介绍 Python 中常见的特殊方法名称,通过图文并茂的方式进行讲解,并对相关知识点进行扩展深化。
一、构造和初始化方法
1. __init__
方法
- 作用:
__init__
方法是 Python 中最常用的特殊方法之一,用于对象的初始化。当创建一个类的实例时,__init__
方法会自动被调用。 - 示例代码:
收起
python
class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("Alice", 25) print(p.name) # 输出: Alice print(p.age) # 输出: 25
-
图文解释
:

当我们创建
Person 类的实例
p 时,Python 会自动调用
__init__ 方法,并将
"Alice" 和
25 作为参数传递给它。在
__init__ 方法内部,我们将这些参数赋值给实例的属性
name 和
age 。
2. __new__
方法
- 作用:
__new__
方法是一个静态方法,它在__init__
方法之前被调用,用于创建对象实例。通常情况下,我们不需要重写__new__
方法,但在某些特殊情况下,例如创建单例模式时,会用到它。 - 示例代码:
收起
python
class Singleton: _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super().__new__(cls) return cls._instance s1 = Singleton() s2 = Singleton() print(s1 is s2) # 输出: True
-
图文解释
:

在这个例子中,我们重写了
__new__ 方法,确保
Singleton 类只有一个实例。当创建
s1 和
s2 时,
__new__ 方法会检查是否已经存在实例,如果不存在则创建一个新实例,否则返回已有的实例。
二、字符串表示方法
1. __str__
方法
- 作用:
__str__
方法用于返回对象的字符串表示形式,通常用于用户友好的输出。当我们使用print
函数打印对象时,会自动调用__str__
方法。 - 示例代码:
收起
python
class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"Person(name={self.name}, age={self.age})" p = Person("Alice", 25) print(p) # 输出: Person(name=Alice, age=25)
-
图文解释
:

在这个例子中,我们重写了
__str__ 方法,返回一个包含对象属性信息的字符串。当我们使用
print 函数打印
p 时,会自动调用
__str__ 方法并输出该字符串。
2. __repr__
方法
- 作用:
__repr__
方法也用于返回对象的字符串表示形式,但它更侧重于开发人员调试和记录日志。通常,__repr__
方法返回的字符串应该能够准确地描述对象,以便可以通过该字符串重新创建对象。 - 示例代码:
收起
python
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person('{self.name}', {self.age})" p = Person("Alice", 25) print(repr(p)) # 输出: Person('Alice', 25)
-
图文解释
:

在这个例子中,我们重写了
__repr__ 方法,返回一个可以用于重新创建对象的字符串。当我们使用
repr 函数时,会调用
__repr__ 方法并返回该字符串。
__str__
和 __repr__
的区别
方法 | 用途 | 调用场景 | 返回值要求 |
---|---|---|---|
__str__ |
用户友好的输出 | print 函数、str() 函数 |
可读性好的字符串 |
__repr__ |
开发人员调试和日志记录 | repr() 函数 |
能够准确描述对象,可用于重新创建对象的字符串 |
三、比较方法
1. __eq__
方法
- 作用:
__eq__
方法用于定义对象的相等比较行为,即判断两个对象是否相等。当使用==
运算符比较两个对象时,会自动调用__eq__
方法。 - 示例代码:
收起
python
class Point: def __init__(self, x, y): self.x = x self.y = y def __eq__(self, other): return self.x == other.x and self.y == other.y p1 = Point(1, 2) p2 = Point(1, 2) print(p1 == p2) # 输出: True
-
图文解释
:

在这个例子中,我们重写了
__eq__ 方法,比较两个
Point 对象的
x 和
y 坐标是否相等。当使用
== 运算符比较
p1 和
p2 时,会调用
__eq__ 方法并返回比较结果。
2. 其他比较方法
除了 __eq__
方法,Python 还提供了其他比较方法,如 __ne__
(不等于)、__lt__
(小于)、__le__
(小于等于)、__gt__
(大于)和 __ge__
(大于等于)。这些方法的使用方式与 __eq__
方法类似。
方法 | 运算符 | 作用 |
---|---|---|
__eq__ |
== |
判断两个对象是否相等 |
__ne__ |
!= |
判断两个对象是否不相等 |
__lt__ |
< |
判断一个对象是否小于另一个对象 |
__le__ |
<= |
判断一个对象是否小于等于另一个对象 |
__gt__ |
> |
判断一个对象是否大于另一个对象 |
__ge__ |
>= |
判断一个对象是否大于等于另一个对象 |
四、数值运算方法
1. __add__
方法
- 作用:
__add__
方法用于定义对象的加法运算行为。当使用+
运算符对两个对象进行加法运算时,会自动调用__add__
方法。 - 示例代码:
收起
python
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) v1 = Vector(1, 2) v2 = Vector(3, 4) v3 = v1 + v2 print(v3.x, v3.y) # 输出: 4 6
-
图文解释
:

在这个例子中,我们重写了
__add__ 方法,实现了两个
Vector 对象的加法运算。当使用
+ 运算符对
v1 和
v2 进行加法运算时,会调用
__add__ 方法并返回一个新的
Vector 对象。
2. 其他数值运算方法
除了 __add__
方法,Python 还提供了其他数值运算方法,如 __sub__
(减法)、__mul__
(乘法)、__truediv__
(真除法)等。这些方法的使用方式与 __add__
方法类似。
方法 | 运算符 | 作用 |
---|---|---|
__add__ |
+ |
加法运算 |
__sub__ |
- |
减法运算 |
__mul__ |
* |
乘法运算 |
__truediv__ |
/ |
真除法运算 |
__floordiv__ |
// |
整除运算 |
__mod__ |
% |
取模运算 |
总结
Python 中的特殊方法为我们提供了强大的功能,允许我们自定义类的行为,使其能够像内置类型一样工作。本文介绍了常见的特殊方法名称,包括构造和初始化方法、字符串表示方法、比较方法和数值运算方法,并通过图文并茂的方式进行了详细讲解。掌握这些特殊方法可以帮助我们编写更加灵活和高效的 Python 代码。
TAG
Python、特殊方法、魔术方法、__init__
、__str__
、__repr__
、__eq__
、__add__
相关学习资源
-
Python 官方文档
:
https://docs.python.org/3/reference/datamodel.html#special-method-names
- 介绍:Python 官方文档对特殊方法进行了详细的说明,是学习特殊方法的权威资料。
-
《Python 核心编程》
:
https://book.douban.com/subject/3112503/
- 介绍:这本书是 Python 领域的经典书籍,对 Python 的各个方面都进行了深入的讲解,包括特殊方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)