2018/8/21 15:16:56
何为操作符重载?
1. 操作符重载就是为了让原有操作符能够作用于用户定义的类型,例如‘+’操作符原来只能用于两侧均为数字或字符串的情况,通过操作符重载可以实现如两个时刻相加求和(类似11:20:00 + 1:25:20)。
1 class Time(object): 2 def __init__(self,hour=0,minute=0,second=0): 3 self.hour = hour 4 self.minute = minute 5 self.hour = hour 6 ... 7 def __add__(self,other): 8 ‘‘‘以下仅作示意用,未考虑进位‘‘‘ 9 hour = self.hour + other.hour 10 minute = self.minute + other.hour 11 second = self.second + other.second 12 print(‘%.2d:%.2d:%.2d‘ %(hour,minute,second)) 13 14 start = Time(11,20) 15 end = Time(1,25,20) 16 ‘‘‘当运行+运算符会自动调用Time类中的__add__方法‘‘‘ 17 start + end
以上对 ‘+‘ 运算符进行了重新的定义,让其能够对Time类进行操作,接下来再复杂一点。
2. 若左右两侧均为Time类,则按照上面方法计算;若其中右侧定为某时间间隔呢,这里就涉及到数据类型的判断。
1 class Time(object): 2 def __init__(self,hour=0,minute=0,second=0): 3 self.hour = hour 4 self.minute = minute 5 self.second = second 6 ... 7 def __add__(self,other): 8 ‘‘‘内置函数isinstance判断数据类型‘‘‘ 9 if isinstance(other,Time): 10 ‘‘‘类中调用类的函数不需要self参数‘‘‘ 11 self.add_time(other) 12 if isinstance(other, int): 13 self.add_interval(other) 14 def add_time(self,other): 15 ‘‘‘以下仅作示意用,未考虑进位‘‘‘ 16 hour = self.hour + other.hour 17 minute = self.minute + other.minute 18 second = self.second + other.second 19 print(‘%.2d:%.2d:%.2d‘ %(hour,minute,second)) 20 def add_interval(self,other): 21 ‘‘‘以下仅作示意用,未考虑进位‘‘‘ 22 hour = self.hour 23 minute = self.minute 24 second = self.second + other 25 print(‘%.2d:%.2d:%.2d‘ %(hour,minute,second)) 26 27 start = Time(11,20) 28 end = Time(1,25,20) 29 ‘‘‘当运行+运算符会自动调用Time类中的__add__方法‘‘‘ 30 start + end 31 >>>12:45:20 32 end1 = 20 33 ‘‘‘当运行+运算符会自动调用Time类中的__add__方法‘‘‘ 34 start + end1 35 >>>11:20:20
3.总结
以上介绍了操作符重载的基本用法,实际的用法会有更多。以下链接列出支持操作符重载的操作符以及其在类中所对应方法的名称(必须严格按照__X__的格式,否则无法识别)
https://www.cnblogs.com/jessonluo/p/4742148.html
原文地址:https://www.cnblogs.com/i-orange/p/9512025.html
时间: 2024-10-08 11:31:37