Python父子类属性访问机制详解及冲突规避
本文探讨Python中父子类属性访问的机制,并重点解决子类访问父类属性时可能出现的__setattr__方法冲突问题。 一个典型的案例是:子类试图使用父类中定义的属性,但由于__setattr__方法的特殊行为导致错误。
问题根源在于,如果父类重写了__setattr__方法,并在该方法中访问自身属性,而子类在初始化时设置属性的顺序又早于父类__setattr__方法的执行,则会产生属性未定义的错误。
解决方案:巧妙运用super()函数
立即学习“Python免费学习笔记(深入)”;
解决方法的关键在于正确使用super()函数,将属性设置委托给父类或对象的默认机制。 修改后的代码如下:
from loguru import loggerclass State: def __setattr__(self, name, value): if hasattr(self, 'logger'): # 检查logger属性是否存在 self.logger.info(f'属性 {name} 设置为 {value}') #修改日志信息,更清晰 super().__setattr__(name, value)class LocalState(State): def __init__(self): super().__init__() self.logger = logger self.ll = 2if __name__ == '__main__': state = LocalState() state.ll = 22222 print(state.ll)
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。