Python魔术方法专题攻略
什么是魔术方法
在Python中,以双下划线开头和结尾的方法,被称为"魔术方法"或"魔法方法"。这些方法是具有特殊含义的,可以提供类的对象行为修改和自定义的能力。比如:__init__
、__str__
、__repr__
等。
以下是魔术方法的常见用途:
- 构造函数
- 对象初始化
- 对象销毁
- 对象字符串表达式
- 对象迭代
- 比较对象
- 重载操作符
魔术方法的常见示例
1. 实现一个带有加法、减法、乘法的矩阵类
class Matrix:
def __init__(self, mat):
self.matrix = mat
def __str__(self):
return '\n'.join([''.join(['{:4}'.format(item) for item in row]) for row in self.matrix])
def __add__(self, other):
mat = []
for i in range(len(self.matrix)):
row = []
for j in range(len(self.matrix[i])):
row.append(self.matrix[i][j] + other.matrix[i][j])
mat.append(row)
return Matrix(mat)
def __sub__(self, other):
mat = []
for i in range(len(self.matrix)):
row = []
for j in range(len(self.matrix[i])):
row.append(self.matrix[i][j] - other.matrix[i][j])
mat.append(row)
return Matrix(mat)
def __mul__(self, other):
mat = []
for i in range(len(self.matrix)):
row = []
for j in range(len(other.matrix[0])):
s = 0
for k in range(len(other.matrix)):
s += self.matrix[i][k] * other.matrix[k][j]
row.append(s)
mat.append(row)
return Matrix(mat)
这里展示了一个矩阵类,使用了__init__
和__str__
方法在初始化和打印时产生正确的格式,同时用__add__
、__sub__
和__mul__
实现了矩阵的加减乘运算。
2. 自定义一个迭代器
class Fibonacci:
def __init__(self, num):
self.num = num
self.n1 = 0
self.n2 = 1
self.count = 0
def __iter__(self):
return self
def __next__(self):
if self.count >= self.num:
raise StopIteration
if self.count == 0:
self.count += 1
return self.n1
elif self.count == 1:
self.count += 1
return self.n2
else:
fn = self.n1 + self.n2
self.n1 = self.n2
self.n2 = fn
self.count += 1
return fn
这里展示了一个斐波那契数列迭代器,使用了__init__
方法初始化,__iter__
方法返回迭代器本身,__next__
方法实现迭代器的逻辑,直到达到所需数目后抛出StopIteration
。可以直接使用for i in Fibonacci(10): print(i)
进行测试。
总结
魔术方法是Python中提供的对类与对象进行自定义的一个强大工具,我们可以利用魔术方法灵活地定义类的行为和属性,方便地进行类与对象的交互和操作。以上是魔术方法使用的两个常见示例,通过实践操作可以帮助我们了解和掌握更多的魔术方法的用法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python魔术方法专题 - Python技术站