学习操作符重载

Posted i-orange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习操作符重载相关的知识,希望对你有一定的参考价值。

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__的格式,否则无法识别)

以上是关于学习操作符重载的主要内容,如果未能解决你的问题,请参考以下文章

导航架构片段重载问题

学习笔记:python3,代码片段(2017)

学习操作符重载

C++深度剖析学习总结 23 操作符重载

C++深度剖析学习总结 23 操作符重载

C++学习29 重载[](下标运算符)