在Python中,魔法方法是那些具有特殊名称的方法,Python的内置方法会在特定的情况下自动调用这些方法。魔法方法允许我们改变对象的默认行为,使得我们可以像操作基本类型一样操作自定义对象。
这里我们将介绍一些常用的魔法方法及其使用场景:
__init__
: 构造函数,用于创建对象时初始化操作。
class MyClass:
def __init__(self, value):
self.value = value
obj = MyClass(10)
__str__
: 当使用print()
函数时,或者对象被转换为字符串类型时调用。
class MyClass:
def __init__(self, value):
self.value = value
def __str__(self):
return f"MyClass with value: {self.value}"
obj = MyClass(10)
print(obj) # 输出: MyClass with value: 10
__repr__
: 类似于__str__
,但其主要用途是交互式解释器中。
class MyClass:
def __init__(self, value):
self.value = value
def __repr__(self):
return f"MyClass(value={self.value})"
obj = MyClass(10)
print(repr(obj)) # 输出: MyClass(value=10)
__iter__
: 当对象是可迭代的(如列表、字典等)时,该方法会被调用。
class MyList:
def __init__(self, values):
self.values = values
def __iter__(self):
for value in self.values:
yield value
my_list = MyList([1, 2, 3])
for item in my_list:
print(item) # 输出: 1 2 3
__getitem__
, __setitem__
, __delitem__
: 用于索引操作(如访问列表元素)。
class MyList:
def __init__(self):
self.values = []
def __getitem__(self, key):
return self.values[key]
def __setitem__(self, key, value):
self.values[key] = value
def __delitem__(self, key):
del self.values[key]
my_list = MyList()
my_list[0] = "a"
my_list[1] = "b"
print(my_list[0]) # 输出: a
del my_list[0]
__add__
: 用于重载加法操作。
class MyNumber:
def __init__(self, value):
self.value = value
def __add__(self, other):
return self.value + other.value
a = MyNumber(5)
b = MyNumber(10)
print(a + b) # 输出: 15
这些是一些常用的魔法方法,每个方法都有其特定的使用场景,可以极大地提高Python代码的灵活性和可读性。