getattr メソッドをオーバーライドしようとしていますが、私の理解では、次のコード スニペットに無限ループが存在するはずです。デフォルトでは object.__getattribute__(self,attr)が呼び出され、属性 'notpresent' が存在しないため、オーバーライドされた getattr メソッドが呼び出されます。名前空間とこのプロセスが繰り返されます。ここでこの動作が観察されない理由を理解するのを手伝ってくれる人はいますか。
さらに、メソッド内で getattribute を明示的に呼び出そうとしたときに、ドット表記を使用して属性にアクセスしているときに getattribute への暗黙的な呼び出しが行われたときに AttributeError が発生しない理由を理解できません。
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