我想知道何时使用__getattr__或__getattribute__.该文件提到了__getattribute__适用于新样式类.什么是新式课程?
根据本指南python描述符 https://docs.python.org/2/howto/descriptor.html
新样式类中的方法对象是使用描述符实现的,以避免在属性查找中特殊包装它们.
我理解这一点的方法是有一个方法对象类型实现__get__并在使用实例和未绑定的方法对象调用时返回绑定的方法对象,在没有实例和只有类的情况下调用.文章还指出,这个逻辑是在object .__ getattribute__方法中实现的.像这样:
def __getattribute__(self, key):
"Emulate type_getattro() in Objects/typeobject.c"
v = object.__getattribute__(self, key)
if hasattr(v, '__get__'):
return v.__get__(None, self)
return v
Run Code Online (Sandbox Code Playgroud)
但是对象.__ getattribute__本身就是一种方法!那怎么绑定一个对象(没有无限递归)?如果它在属性查找中是特殊的,那不会破坏删除旧式特殊套管的目的吗?