Python:OOP运算符重载

利用运算符重载自定义一个数组类型

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运算符重载

python重载迭代器

Python学习手册

作者:Rookie
电子邮箱:879582732@qq.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值