这是带有自定义__getattr__
实现的简单类:
class Wrapper(object):
def __init__(self, obj):
self.obj = obj
def __getattr__(self, name):
func = getattr(self.__dict__['obj'], name)
if callable(func):
def my_wrapper(*args, **kwargs):
print "entering"
ret = func(*args, **kwargs)
print "exiting"
return ret
return my_wrapper
else:
return func
我在这里不明白的是为什么使用getattr(self.__dict__['obj'], name)
而不是getattr(self.obj, name)
来简化?
因为据我所知self.__dict__['obj']
的作用是调用self.obj
的值。可能与向后兼容性有关吗?
答案 0 :(得分:2)
我相信,此代码存在的原因-作者试图逃避无尽的递归循环-不会由__getattr__
触发self.obj