内建函数重载
__abs__ abs(obj) 函数调用
__len__ len(obj) 函数调用
__reversed__ reversed(obj) 函数调用
__round__ round(obj) 函数调用
数值转换函数重载:
__int__ int(obj)
__float__ float(obj)
__complex__ complex(obj)
__bool__ bool(obj)
布尔测试运算符重载
格式:
def __bool__(self):
...
作用:
1) 用于bool(obj) 函数取值
2) 用于if语句真值表达式中
3) 用于while语句真值表达式中
重载说明:
当没有__bool__(self)方法时,真值测试将取 __len__(self) 方法的返回值来测试布尔值
in /not in 运算符重载
格式:
def __contains__(self, e):
...
作用:
成员资格测试(通常返回值为布尔值)
索引的切片运算符的重载
重载方法:
__getitem__(self, i) 方法
__setitem__(self, i, v) 方法
__delitem__(self, i) 方法
作用:
让自定义类型的对象能进行索引和切片操作
示例:
class MyList:
def __init__(self, begin, end):
self.data = [x for x in range(begin, end)]
L1 = MyList(1, 10)
print(L1[0])
切片 (slice) 重载
切片重载同索引重载共用相同的方法
__getitem__(self, i) 切片取值
__setitem__(self, i, v) 切片赋值
__delitem__(self, i) del删除切片
属性的管理重载:
__getattr__(self, name) 根据名字获取属性
__setattr__(self, name, value) 设置对象的属性和相应的值
__delattr__(self, name)
作用:
在现有属性上添加一些属性.
__getattr__方法会在没有此属性调用,可以返回名字所对应的值,如果确定不需要此属性时,可以引发AttributeError错误!
__setattr__方法会在对属性赋值前被调用,通常用来个性化设置相应的属性。
迭代器(终极)
什么是迭代器?
可以通过next函数取值的对象就是迭代器
next函数的重载方法:
def __next__(self):
作用:
用来实现迭代器协议
迭代器协议是指对象能够使用next函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定
什么是可迭代对象
可迭代对象是指能用iter(obj)函数返回迭代器的对象(实例)
注:可迭代对象内部需要定义 __iter__(self) 方法来返回迭代器对象
异常
with语句
语法:
with 表达式 [as 变量], [表达式2 [as 变量2]], ...:
语句
说明:
as子句可以省略,as子句中的变量用于绑定处理对象
with 语句并不改变异常的状态
作用:
使用于对资源进行访问的场合,确保使用过程是不管是否发生异常,都会执行必要的"清理"操作,并释放资源;
如:文件使用后自动关闭,线程中锁的自动获取和释放等
环境管理器
类内有__enter__ 和 __exit__方法的类被称为环境管理器
能够用with进行管理的对象必须是环境管理器
__enter__ 方法将在进入with语句时被调用返回由as变量管理的对象
__exit__ 方法将在离开with语句时被调用,且可以用参数来判断离开with语句时是否有异常发生并做出相应的处理