python学习手册笔记——29.运算符重载

00.常见的运算符重载方法
方法 重载 调用
__init__ 构造函数 对象建立:X = Class(args)
__del__ 析构函数 X对象收回
__add__ 运算符+ 如果没有__iadd_,X + Y, X += Y
__or__ 运算符|(位OR) 如果没有_ior_,X|Y,X|=Y
__repr__,__str__ 打印,转换 print(x)、repr(x)、str(x)
__call__ 函数调用 X(*args, **kargs)
__getattr__ 点号运算 X.undefined
__setattr__ 属性赋值语句 X.any = value
__delattr__ 属性删除 del X.any
__getattribute__ 属性获取 X.any
__getitem__ 索引运算 X[key],X[i:j],没有__iter__时的for循环和其他迭代器
__setitem__ 索引赋值语句 X[key] = value, X[i:j] = sequence
__delitem__ 索引和分片删除 del X[key], del X[i:j]
__len__ 长度 len(X),如果没有__bool__,真值测试
__bool__ 布尔测试 bool(X),真测试
__lt____gt____le____ge____eq____ne__ 特定的比较  
__radd__ 右侧加法  
__iadd__ 实地加法  
__iter__,__next__ 迭代环境  
__contains__ 成员关系测试  
__index__ 整数值  
__enter__,__exit__ 环境管理器  
__exit__ 环境管理其  
__get__,__set__ 描述符属性  
__delete__    
__new__ 创建 在__nint__之前创建对象

02.Property内置函数允许我们把方法和特定类属性上的获取和设置操作关联起来。
描述符提供了一个协议,把一个类的__get__和__set__方法域对特定类属性的访问关联起来。

01.
__getattr__:时拦截属性点号运算。当通过未定义(不存在)属性名臣和实例进行点号运算时,就会用属性名臣作为字符串调用这个方法。
__setatrr__:会拦截所有属性的赋值语句
__getattribute__:方法拦截所有的属性获取,而不只是那些未定义的
__repr__:返回实例的字符串表达形式的__repr__方法。
__str__
__radd__:+运算符右侧使用实例对象
__iadd__:原处加法
__call__:如果定义了,Python就会未实例应用函数调用表达式运行__call__方法。
__it__:
__gt__:
__bool__:获取一个直接的布尔值,然后,如果没有该方法,就尝试__len__类根据对象的擦汗高难度确定一个真值。
__len__:一个非空对象看作是真
__del__:每当实例产生时,就会调用__init__构造函数。每当实例空间被收回时(在立即收集时),他的对立面__del__,也就是析构函数,就会自动执行。

posted @ 2019-07-24 15:56  艾小小雨  阅读(184)  评论(0编辑  收藏  举报