2023年 2月 9日 来源: 新华社微博 字号:默认 超大

列举面向对象中带双下线的特殊方法?

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