Python中__getattr__与__setattr__的默认实现是什么?
Python
__getattr__ 与 __setattr__ 默认实现机制 __getattr__ 默认实现
- 触发规则:仅当属性查找的全流程都未命中时才会被调用。属性查找的默认顺序是:先调用
__getattribute__查找实例的__dict__→ 查找对应类的__dict__→ 查找父类MRO链上所有类的__dict__→ 都找不到时才会触发__getattr__ - 默认行为:直接抛出
AttributeError异常,提示当前对象不存在该属性 - 补充说明:空类实例调用不存在的属性时抛出的错误,就是默认
__getattr__的输出结果
__setattr__ 默认实现
- 触发规则:只要对对象的属性执行赋值操作,无论该属性是否已经存在,都会触发该方法
- 默认行为:将赋值的属性名和对应值,直接写入当前对象的实例属性字典
__dict__中,不会修改类属性或者父类属性。如果赋值的属性名和类属性重名,赋值后会在实例层面覆盖该属性的取值 - 补充说明:如果重写该方法,不要直接在内部执行
self.属性名 = 值的操作,会触发递归调用无限循环,需要调用父类的__setattr__实现,或者直接操作self.__dict__写入值
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

