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