【发布时间】:2011-05-16 18:59:26
【问题描述】:
我试图了解__getattr__ 和__getattribute__ 之间的区别,但是我失败了。
answer 对 Stack Overflow 问题的回答 Difference between __getattr__ vs __getattribute__ 说:
__getattribute__在查看实际属性之前被调用 对象,因此可能很棘手 正确实施。你可以最终在 无限递归非常容易。
我完全不知道这意味着什么。
然后它继续说:
你几乎肯定想要
__getattr__。
为什么?
我读到如果 __getattribute__ 失败,__getattr__ 会被调用。那么为什么有两种不同的方法做同样的事情呢?如果我的代码实现了新的样式类,我应该使用什么?
我正在寻找一些代码示例来解决这个问题。我已尽我所能在 Google 上搜索,但我找到的答案并没有彻底讨论这个问题。
如果有任何文档,我准备阅读。
【问题讨论】:
-
如果有帮助,来自文档“为了避免此方法中的无限递归,其实现应始终调用具有相同名称的基类方法来访问它需要的任何属性,例如,对象.__getattribute__(self, name)。” [docs.python.org/2/reference/…
标签: python oop encapsulation getattr getattribute