我正在尝试覆盖 getattr 方法,根据我的理解,以下代码片段中应该有无限循环,因为默认情况下 object.__getattribute__(self,attr)被调用,它将调用覆盖的 getattr 方法,因为属性“不存在”不存在命名空间,这个过程将不断重复。谁能帮我弄清楚为什么这里没有观察到这种行为。
此外,我无法弄清楚为什么在使用点符号访问属性时完成对 getattribute 的隐式调用时没有引发 AttributeError,而当我们试图在方法中显式调用 getattribute 时第二次引发它
class Test(object):
#Act as a fallback and is invoked when getattribute is unable to find attribute
def __getattr__(self,attr):
print "getattr is called"
return object.__getattribute__(self,attr) #AttributeError is raised
t=Test([1,2,3,4])
b = t.notpresent