什么是魔法方法
Python 的魔法方法(Magic
Methods),也叫特殊方法(Special
Methods)或双下方法(dunder
methods,因为名字前后都有双下划线 __),是 Python
类中预定义的一类方法,用于定义对象在特定操作下的行为。
当你使用像
+、len()、str()、in、[]
等语法时,Python 其实是在背后调用对应的魔法方法。
常见魔法方法举例
1. __init__:初始化对象
1 2 3 4 5
| class Person: def __init__(self, name): self.name = name
p = Person("Alice")
|
2. __str__
和 __repr__:控制对象的字符串表示
__str__ 用于 str(obj) 或
print(obj),面向用户。
__repr__
用于调试,面向开发者,通常返回可执行的代码字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Point: def __init__(self, x, y): self.x = x self.y = y
def __str__(self): return f"Point({self.x}, {self.y})"
def __repr__(self): return f"Point(x={self.x}, y={self.y})"
p = Point(1, 2) print(p) print(repr(p))
|
3. __len__:支持
len(obj)
1 2 3 4 5 6 7 8 9
| class MyList: def __init__(self, items): self.items = items
def __len__(self): return len(self.items)
my_list = MyList([1, 2, 3]) print(len(my_list))
|
4.
__getitem__ / __setitem__:支持
obj[key] 和 obj[key] = value
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Vector: def __init__(self, data): self.data = data
def __getitem__(self, index): return self.data[index]
def __setitem__(self, index, value): self.data[index] = value
v = Vector([10, 20, 30]) print(v[1]) v[1] = 99 print(v[1])
|
5. __add__:支持 +
运算符
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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) print(v1 + v2)
|
6. __eq__:支持 ==
比较
1 2 3 4 5 6 7 8 9 10
| class Book: def __init__(self, title): self.title = title
def __eq__(self, other): return self.title == other.title
b1 = Book("Python") b2 = Book("Python") print(b1 == b2)
|
7.
__call__:让对象像函数一样被调用
1 2 3 4 5 6 7 8 9
| class Multiplier: def __init__(self, factor): self.factor = factor
def __call__(self, x): return x * self.factor
double = Multiplier(2) print(double(5))
|
参考资料
【Python
特性】魔法方法:让你的类和原生类一样顺滑_哔哩哔哩_bilibili