利用运算符重载自定义一个数组类型
1. 创建类
class Array:
def __init__(self,List):
self.array = list(List)
def __add__(self,List): # 定义加法
A = Array([None]*len(List))
if len(List) != self.__len__():
print("长度不相等,无法相加")
elif isinstance(List,set) or isinstance(List,list) or isinstance(List,tuple) or isinstance(List,Array):
for i in range(len(A)):
A[i] = self.array[i] + List[i]
else :
print("该类型不支持")
return A
def __mul__(self,num): #定义乘法
if isinstance(num,int):
return self.array*num
else:
print("不支持这类运算")
def __getitem__(self,index): #索引运算
return self.array[index]
def __setitem__(self,index,value): #索引赋值语句
self.array[index] = value
def __len__(self): # 数组的长度
return len(self.array)
# def __next__(self): # 还可以自定义迭代器,但是由于__getitem__可以实现索引迭代,所以这里就不做自定义了
# pass
# def __iter__(self):
# pass
2. 创建一个实例对象
L1 = [1,2,3,4]
array1 = Array(L1)
array1[0]
1
3.再创建一个实例对象
L2 = [2,3,4,5]
array2 = Array(L2)
array2[1]
3
4.打印这两个实例对象中的值
for i in range(4):
print(array1[i],end=" ")
1 2 3 4
for i in range(4):
print(array2[i],end=" ")
2 3 4 5
5.测试索引输出和修改对象
array1[3]
4
array1[3] = 5
array1[3]
5
for i in range(4):
print(array1[i],end=" ")
1 2 3 5
array1[:]
[1, 2, 3, 5]
array1[:2] = [2,3]
array1[:]
[2, 3, 3, 5]
for i in array1:
print(i,end=" ")
2 3 3 5
6. 测试重载运算加法
array = array1.__add__([2,3,4,5])
for i in range(array.__len__()):
print(array[i],end=" ")
4 6 7 10
array_add = array1 + array2
for i in range(len(array1)):
print(array_add[i],end=" ")
4 6 7 10
下面测试一些错误的案例
array_error1 = array1 + [1,2,3]
长度不相等,无法相加
array_error2 = array1 + "hehe"
该类型不支持
array_error3 = array1 + (1,2,3,4,5)
for i in range(len(array_error3)):
print(array_error3[i])
长度不相等,无法相加
None
None
None
None
None
7.测试乘法运算
array_mul = array1.__mul__(3)
for i in range(array_mul.__len__()):
print(array_mul[i],end= " ")
2 3 3 5 2 3 3 5 2 3 3 5
array_mul2 = array1 * 2
for i in range(len(array_mul2)):
print(array_mul2[i],end=" ")
2 3 3 5 2 3 3 5
错误案例测试
array_error4 = array1 * 1.5
不支持这类运算
for i in range(len(array_erroe4)):
print(array_error4[i], end=" ")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_51212/3991759325.py in <module>
----> 1 for i in range(len(array_erroe4)):
2 print(array_error4[i], end=" ")
NameError: name 'array_erroe4' is not defined
参考内容:
Python学习手册
电子邮箱:879582732@qq.com