在Python中,的确有“魔法函数”(Magic Methods)这种说法,也被称为特殊方法(Special Methods)。这些函数的名称以双下划线开始和结束,例如 __init__
、__len__
等。它们为Python提供了一种约定俗成的方式,使得用户定义的类能够与Python的内置操作和语法进行交互。以下是魔法函数的常见用途:
1. 对象初始化与构造
__init__
:构造函数,在创建对象时被调用,用于初始化对象的属性。
python">class MyClass:def __init__(self, value):self.value = value
2. 模拟容器类型
__len__
:定义当使用内置函数len()
时对象的行为,返回对象的长度。
python">class MyList:def __init__(self):self.data = []def __len__(self):return len(self.data)
__getitem__
:使得对象可以像序列或映射一样通过索引或键来访问元素。
python">class MyDict:def __init__(self):self.data = {}def __getitem__(self, key):return self.data[key]
3. 运算符重载
__add__
:定义对象使用+
运算符时的行为。
python">class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):return Vector(self.x + other.x, self.y + other.y)
__eq__
:定义对象使用==
运算符时如何判断相等。
python">class Point:def __init__(self, x, y):self.x = xself.y = ydef __eq__(self, other):return self.x == other.x and self.y == other.y
4. 迭代器相关
__iter__
:返回一个迭代器对象,使得对象可以在for
循环中使用。
python">class MyRange:def __init__(self, start, end):self.current = startself.end = enddef __iter__(self):return selfdef __next__(self):if self.current >= self.end:raise StopIterationvalue = self.currentself.current += 1return value
5. 字符串表示
__str__
:定义当使用str()
函数或在print()
中输出对象时的字符串表示形式。
python">class Person:def __init__(self, name):self.name = namedef __str__(self):return f"Person named {self.name}"
__repr__
:定义对象的“官方”字符串表示形式,通常用于调试和开发。
python">class Book:def __init__(self, title, author):self.title = titleself.author = authordef __repr__(self):return f"Book('{self.title}', '{self.author}')"
魔法函数极大地增强了Python类的灵活性和表现力,使得自定义类能够像内置类型一样自然地融入Python的编程环境中。
另外可以参考:Python 魔术方法