自省
hasattr(obj,"属性") :obj.属性是否存在
getattr(obj,"属性") :获取obj.属性,不存在则报错
getattr(obj,"属性","默认值") :获取obj.属性,不存在不报错,返回默认值
setattr(obj,"属性,"属性的值") :obj.属性=属性的值
delattr(obj,"属性") : del obj.属性
__getattr__,__setattr__,__delattr__
obj点的方式去操作属性时触发的方法
__getattr__ : obj.属性 不存在时触发
__setattr__ : obj.属性=属性的值 时触发
__delattr__ : del obj.属性 时触发
__getitem__,__setitem__,__delitem__
obj[”属性“]的方式去操作属性时触发的方法
__getitem__ :obj["属性"] 时触发
__setitem__ :obj["属性"]=属性的值 时触发
__delitem__ :del obj["属性"] 时触发
__get__,__set__,__delete__
描述符就是一个新式类,这个类至少要实现上述三个方法的一个
格式:
class 描述符: def __get__(): pass def __set__(): pass def __delete__(): pass class 类: name=描述符() obj=类() obj.name #get obj.name="steven" #set del obj.name #delete
__getattribute__
不管属性存在不存在都会触发运行
当__getattribute__与__getattr__同时存在,只会执行__getattribute__,除非__getattribute__在执行过程中抛出AttributeError
__del__
当对象在内存中被释放时,自动触发执行