python学习手册(第4版) 第二十九章 运算符重载

1.再次重温程序结构

程序由模块组成,模块中包含了语句块,语句块中包含了表达式,表达式创建并处理对象。

 

2.运算符重载

在类方法中拦截内置的操作。

(1)运算符重载让类拦截常规的python运算

(2)类可重载python所有表达式运算符

(3)类也可重载打印、函数调用、属性点号运算等内置运算

(4)重载使类实例的行为像内置类型

(5)重载是通过特殊名称的类方法来实现的(双下划线开始和结束)

 

3.构造函数是最常见的运算符重载

 

4.常见的运算符重载方法

python学习手册(第4版) 第二十九章 运算符重载

python学习手册(第4版) 第二十九章 运算符重载

 

4.简单了解常用运算符重载方法

重点说一下__new__方法,在实现类的单例模式时用到了它

比如__add__方法,对应了+运算符,当类的实例执行+运算时,不是使用内置的+运算,而是类中重新定义的__add__方法

(运算符重载方法可以被继承)

(继承自python3.0隐含了object类)

 

5.__next__方法实现迭代运算符重载

>>> class Squares:
...     def __init__(self,start,stop):
...         self.value = start - 1
...         self.stop = stop
...     def __iter__(self):
...         return self
...     def __next__(self):                           #重载了__next__方法
...         if self.value == self.stop:
...             raise StopIteration
...         self.value += 1
...         return self.value ** 2
...
>>> for i in Squares(1,5):
...     print(i,end=' ')
...
1 4 9 16 25 >>>

 

6.__del__析构函数

属于__init__构造函数的对立面,内存中新增类的对象时自动调用__init__,当内存释放类的对象时自动调用__del__。