Python通过重写一些内置方法,实现了运算符的重载功能。
__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)
__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)
__getitem__()
方法__setitem__()
方法__setitem__()
方法实现对序列对象的修改。__delitem__()
方法__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="")