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 中占有重要的地位,并且涵盖了你想得到的几乎全部基础功能,灵活运用可以让你的代码更加简洁高效。

所有的魔法方法在官方文档里都可以找到,但是它非常的枯燥并且缺少示例,不太容易理解。