python中__getattribute__和obj .__ dict __ ['x']之间的区别?

ciz*_*ixs 6 python attributes class

我理解在python中,无论何时访问类/实例变量,它都会调用__getattribute__方法来获取结果.但是我也可以obj.__dict__['x']直接使用,得到我想要的东西.

我有点困惑有什么区别?当我使用时getattr(obj, name),是在呼叫__getattribute__还是在obj.__dict__[name]内部?

提前致谢.

tun*_*ned 2

__getattribute__()方法用于较低级别的属性处理。

__dict__默认实现尝试在内部(或__slots__)中查找名称。如果未找到该属性,则调用__getattr__().

更新(如评论中所示):

它们是在 Python 数据模型中查找属性的不同方法。它们是内部方法,旨在在任何可能的情况下正确回退。一条线索:“机器在object.__getattribute__()其中转变b.x成…… type(b).__dict__['x'].__get__(b, type(b))”。来自 docs.python.org/3/howto/descriptor.html