python学习笔记-面向对象进阶复习小结

自省

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__

当对象在内存中被释放时,自动触发执行