class D(object):
def __init__(self):
self.default = 0.0
self.test = 20
self.test2 = 21
def __getattribute__(self, name):
try:
if name == "test":
print ("__getattribute__ name = %s" % name)
return self.test #This will default call same function "__getattribute__", can fix by object
else:
print ("__getattribute__ name = %s" % name)
return object.__getattribute__(self, name)
except AttributeError:
print "getattribute error"
raise
def __getattr__(self, name):
print ("__getattr__ name = %s" % name)
print ("self.default=%s" % self.default)
return self.default
if __name__ == "__main__":
d = D()
#print d.test #This will caused recurison error because it call the same function, your getattribute
print d.test2
print d.ts #When "__getattribute__" raise error, it will call in "__getattr__".