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
-
图文解释
:

![image]()
当我们创建
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
-
图文解释
:

![image]()
在这个例子中,我们重写了
__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)
-
图文解释
:

![image]()
在这个例子中,我们重写了
__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)
-
图文解释
:

![image]()
在这个例子中,我们重写了
__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
-
图文解释
:

![image]()
在这个例子中,我们重写了
__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
-
图文解释
:

![image]()
在这个例子中,我们重写了
__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 的各个方面都进行了深入的讲解,包括特殊方法。






浙公网安备 33010602011771号