《Python 魔法方法实战:getattr 与 getattribute 的权力游戏》
一、引言:属性访问背后的“宫廷政治”
在 Python 的世界里,属性访问并不像表面那样简单。每当你写下 obj.name,背后其实是一场精密的“权力游戏”。
__getattribute__是贴身侍卫,任何属性访问都必须先经过它。__getattr__是顾问,只有在找不到属性时才会被召唤。
这两个魔法方法不仅决定了对象的行为,还能让我们构建出动态代理、懒加载、权限控制等高级机制。但它们也暗藏风险,稍有不慎就会陷入无限递归的深渊。
本文将通过一个真实场景 —— 构建一个动态代理类 —— 来深入讲解这两个方法的差异、使用技巧与最佳实践。
二、背景介绍:Python 的属性访问机制
Python 中访问对象属性的流程如下:
- 首先调用
__getattribute__(无条件调用)。 - 如果属性不存在,抛出
AttributeError。 - 接着调用
__getattr__(仅在属性不存在时调用)。

订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



