Python 中的魔法方法是指以双下划线开头和结尾的特殊方法,比如 __init__
、 __abs__
等。
Python 中的内置类定义了非常多的魔法方法。比如 int
类,你可以用 dir()
函数查看:
>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', ...]
魔法方法可以直接被调用,但更多的时候,它会在特定情况下被自动调用。
就比如整数相加的计算,它实际上就相当于:
>>> num = 1
>>> num + 2
3
>>> num.__add__(2)
3
你可以让一个自定义的类实现 __add__
魔法方法,从而使它也可以进行加法计算。
比如定义一个矢量:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
new_x = self.x + other.x
new_y = self.y + other.y
return Vector(new_x, new_y)
由于实现了 __add__
方法,这个矢量类就可以非常自然的相加:
>>> v1 = Vector(1, 2)
>>> v2 = Vector(3, 4)
>>> v3 = v1 + v2
>>> v3.x
4
>>> v3.y
6
总之,魔法方法在 Python 中占有重要的地位,并且涵盖了你想得到的几乎全部基础功能,灵活运用可以让你的代码更加简洁高效。
所有的魔法方法在官方文档里都可以找到,但是它非常的枯燥并且缺少示例,不太容易理解。