Python——运算符重载


运算符重载指的是将运算符与类方法关联起来,每个运算符对应一个指定的内置方法。

Python通过重写一些内置方法,实现了运算符的重载功能。

1.加法运算符重载和减法运算符重载

  • 加法运算符重载——__add__()方法
  • 减法运算符重载——__sub__()方法

例 7-16 加法运算符重载和减法运算符重载的实现:

#ex0716.py  加法运算符重载和减法运算符重载的实现
class Computing:
    def __init__(self,value):
        self.value = value
    def __add__(self, other):
        lst = []
        for i in self.value:
            lst.append(i+other)#在列表末尾添加新的对象
        return lst
    def __sub__(self, other):
        lst = []
        for i in self.value:
            lst.append(i-other)
        return lst

c = Computing([-1,3,4,5])
print("+运算符重载后的列表",c+2)
print("-运算符重载后的列表",c-2)

运行结果:
在这里插入图片描述

2.__str__()方法重载和__ge__()方法重载

  • 重载__str__()__repr__()方法可以将对象转换为字符串的形式,在执行print()、str()、repr()等方法以及交互模式下直接打印对象时,会调用__str__()__repr__()方法。__str__()__repr__()方法的区别是,只有print()、str()方法可以调用__str__()方法转换,而 __repr__()方法在多种操作下都能将对象转换为自定义的字符串形式。
  • __ge__()方法用于重载>=运算符

例 7-17 __str__()方法重载和 __ge__()方法重载的实现

#ex0717.py  __str__()方法重载和 __ge__()方法重载的实现
class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):  #重载__str__()
        return "{}{}".format(self.name,self.age)
    def __ge__(self, obj):    #重载__ge__()
        if self.age >= obj.age:
            return True
        return False

s1 = Student("Rose",20)
s2 = Student("John",19)
print("学生s1:",s1)
print("学生s2:",s2)
print("s1 >= s2 大小比较结果:",s1 >= s2)

运行结果:
在这里插入图片描述

3.索引的切片重载

  1. __getitem__()方法
    用于索引、切片操作,在对象执行索引、切片或者 for 迭代操作时,会自动调用该方法。
  2. __setitem__()方法
    索引赋值,在通过赋值语句给索引或者切片赋值时,可调用__setitem__()方法实现对序列对象的修改。
  3. __delitem__()方法
    当使用 del 关键字删除对象时,实质上会调用__delitem__()方法实现删除操作。

例 7-18 __getitem__()方法、__setitem__()方法、__delitem__()方法的实现:

#ex0718.py  __getitem__()方法、__setitem__()方法、__delitem__()方法的实现
class SelectData:
    def __init__(self,data):
        self.data = data[:]
    def __getitem__(self, index):
        return self.data[index]
    def __setitem__(self, index, value):
        self.data[index] = value
    def __delitem__(self, index):
        del self.data[index]

#在下面测试
x = SelectData([12,33,23,"ab",False])
print(x)    #x的地址
print(x[:]) #切片,x中的全部元素
print(x[2]) #切片,x中的下标为2元素
print(x[2:])    #切片,x中从下标为2起的所有元素
x[4] = 100  #索引赋值,替换x中的下标为4的元素
print(x[:])
del(x[3])   #删除x中的下标为3的元素
for num in x:   #遍历对象x中的元素
    print(num,end="")

运行结果:
在这里插入图片描述

Python中的运算符重载是指通过特殊方法来定义自定义对象的操作。通过重载运算符,我们可以使用Python内置的运算符来执行自定义对象的特定操作。例如,我们可以通过重载"+"运算符来实现两个向量的相加操作。 在Python中,运算符重载是通过定义特殊方法来完成的。这些特殊方法具有特定的命名规则,以表示相应的运算符。例如,要重载"+"运算符,我们需要定义一个名为`__add__`的特殊方法。 下面是一个示例,演示了如何在Vector类中重载"+"运算符: ```python class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): if isinstance(other, Vector): return Vector(self.x + other.x, self.y + other.y) else: raise TypeError("Unsupported operand type(s) for +: 'Vector' and '{}'".format(type(other))) ``` 在上述示例中,我们定义了一个名为`__add__`的特殊方法,用于重载"+"运算符。该方法接受两个参数,self表示当前对象,other表示另一个操作数。在方法体中,我们首先检查other是否为Vector类型的对象,然后执行相应的向量相加操作。如果other不是Vector类型的对象,则引发TypeError。 通过这种方式,我们可以使用"+"运算符对两个Vector对象进行相加操作,例如: ```python v1 = Vector(3, 4) v2 = Vector(5, 6) result = v1 + v2 print(result.x, result.y) # 输出:8 10 ``` 除了"+"运算符Python还支持其他运算符重载,如"-"、"*"、"/"等。通过定义相应的特殊方法,我们可以为自定义对象定义这些运算符的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值