魔术方法(__str__、__repr__ 等)
深入了解 Python 的特殊方法,学习如何自定义对象行为
魔术方法(__str__、__repr__ 等) 是 CoddyKit 上的免费 Python Academy 课时。 这是第 6 节课,共 6 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 6 节课。
魔术方法简介
魔术方法也称为双下划线方法(dunder 方法,名称源自“double underscore”),是 Python 中的特殊方法,可让您定义对象在特定情况下的行为。
在本课中,您将学习如何使用 __str__、__repr__ 等常见魔术方法。

什么是魔术方法
魔术方法是 Python 中预先定义的方法,在对对象执行特定操作时会自动调用。它们通过双下划线来识别,例如 __init__ 或 __str__。
<code>__init__</code> 方法
__init__ 方法是用于初始化新对象的构造方法。创建对象时会自动调用它:
# Using the __init__ method to initialize attributes
class Person:
def __init__(self, name, age):
self.name = name # Initialize the name attribute
self.age = age # Initialize the age attribute
# Creating an instance of Person
person = Person("Alice", 30)
print(person.name, person.age) # Outputs: Alice 30<code>__str__</code> 方法
调用 print() 时,__str__ 方法用于定义对象的字符串表示形式:
# Defining the __str__ method
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Name: {self.name}, Age: {self.age}" # String representation
person = Person("Alice", 30)
print(person) # Outputs: Name: Alice, Age: 30<code>__repr__</code> 方法
__repr__ 方法提供对象的正式字符串表示形式,通常用于调试:
# Defining the __repr__ method
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person('{self.name}', {self.age})" # Debug-friendly representation
person = Person("Alice", 30)
print(repr(person)) # Outputs: Person('Alice', 30)使用魔术方法重载运算符
您可以使用魔术方法自定义 + 或 == 等运算符的行为:
# Overloading the + operator with __add__
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y) # Adding two points
def __str__(self):
return f"({self.x}, {self.y})"
point1 = Point(1, 2)
point2 = Point(3, 4)
result = point1 + point2 # Calls __add__
print(result) # Outputs: (4, 6)常用的魔术方法
以下是一些常用的魔术方法:
__len__:定义len()函数的行为。__getitem__:支持像列表或字典一样进行索引。__eq__:使用==自定义相等性比较。
使用 <code>__len__</code> 和 <code>__getitem__</code>
您可以使用 __len__ 定义自定义对象的长度,并使用 __getitem__ 使其支持索引:
# Using __len__ and __getitem__ in a custom class
class CustomList:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items) # Defines the behavior of len()
def __getitem__(self, index):
return self.items[index] # Enables indexing
custom_list = CustomList([1, 2, 3])
print(len(custom_list)) # Outputs: 3
print(custom_list[1]) # Outputs: 2魔术方法中的常见错误
以下是需要避免的一些错误:
- 定义魔术方法时,其行为与预期用途不一致。
- 不必要地重载运算符。
- 忘记在自定义数据类型中实现必需的魔术方法。
我们学到了什么
在本课中,您学习了:
- 魔术方法的含义及其用途。
- 如何使用
__init__、__str__和__repr__等常见魔术方法。 - 如何使用魔术方法重载运算符。
做得很好!让我们进入下一个主题。

用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 76
- 课程
- 320
常见问题解答
「魔术方法(__str__、__repr__ 等)」课时是免费的吗?
是的 — 「魔术方法(__str__、__repr__ 等)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 6 节课。
「魔术方法(__str__、__repr__ 等)」这节课中我会学到什么?
深入了解 Python 的特殊方法,学习如何自定义对象行为 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 6 节课,共 6 节。
「魔术方法(__str__、__repr__ 等)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。