列举面向对象中带双下线的特殊方法?
类的内置方法(魔法方法):
凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法。
类的内置方法,会在某种条件满足下自动触发。
内置方法如下:
__new__: 在__init__触发前,自动触发。 调用该类时,内部会通过__new__产生一个新的对象。
__init__: 在调用类时自动触发。 通过产生的对象自动调用__init__()
__getattr__: 在 “对象.属性” 获取属性时,若 “属性没有” 时触发。
__getattribute__: 在 “对象.属性” 获取属性时,无论 "属性有没有" 都会触发。
__setattr__:当 “对象.属性 = 属性值” , 添加或修改属性时触发
__call__ : 在调用对象 “对象 + ()” 时触发。 即:对象() 或者 类()()
__str__ : 在打印对象时触发。
__getitem__: 在对象通过 “对象[key]” 获取属性时触发。
__setitem__: 在对象通过 “对象[key]=value值” 设置属性时触发。
__gt__,__lt__,__eq__:自定义比较对象大小双下:gt、lt、eq
__enter__: 进入文件时,开打文件时执行。返回值:self
__exit__: 退出文件时,报错中断、或者代码执行完时执行。 返回值:可以有返回值,是bool类型
__del__ : 手动删除时立马执行,或者程序运行结束时自动执行
使用场景:当你的对象使用过程中,打开了不属于解释器的资源;例如,文件,网络端口
__slots__:原理,给对象声明只有某些属性,从而删除不必要的内存,不能添加新属性
使用场景:1.优化对象内存 2.限制属性数量
出处:https://www.cnblogs.com/liupengfei1123/p/17105217.html