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__".
getattribute getattr
最新推荐文章于 2022-05-12 16:23:50 发布
本文介绍了一个使用Python实现的类D,该类通过重写__getattribute__和__getattr__方法来自定义对象属性的访问方式。当尝试访问'test'属性时会触发特定的行为,并在未找到属性时返回默认值。
305

被折叠的 条评论
为什么被折叠?



