在 __getattr__ 中使用 __dict__ 属性

Using the __dict__ attribute in __getattr__

这是一个简单的 class 和自定义的 __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 的值。它可能与向后兼容性有关吗?

我相信,这段代码存在的原因——作者试图避免无休止的递归循环——不触发 __getattr__ self.obj