python - getattr 与 getattribute 机制
#__getattribute__ class Foo(): def __init__(self,name): self.name = name def __getattr__(self, item): return "找不到属性,触发getattr!" def __getattribute__(self, item): print("测试 getattribute") # 步骤三 # super().__getattribute__(item) # 步骤四 raise AttributeError("抛出异常....") XXX = Foo("Anec") # 步骤一 直接运行 # 步骤二 注释__getattribute__ # 步骤三 __getattribute__ 继承super()执行 # 步骤四 在__getattribute__ 加上raise语句 #类中已有的属性: # 1.由测试可知,能找到类属性将执行__getattribute__内置方法(类属性并未显示) # 2.注释__getattribute__ 将正常显示类属性 # 3.返回为None # 4.直接触发getattr方法,没有返回类属性 print(XXX.name) #类中不存在的属性: # 1.由测试可知,找不到类属性也将执行__getattribute__内置方法. # 2.注释 __getattribute__ 将直接触发 getattr 方法 # 3.触发 getattr 方法 # 4.直接触发getattr方法,没有返回类属性 print(XXX.name2) #__getattribute__ #工作机制,在访问属性的时候,不管有没有类属性,都会执行__getattribute__ #当__getattribute__有raise触发报错时,会接着触发getattr
既要脚踏实地,也需仰望天空