在__getattr__中使用__dict__属性

时间:2019-02-11 23:56:31

标签: python getattr

这是带有自定义__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的值。可能与向后兼容性有关吗?

1 个答案:

答案 0 :(得分:2)

我相信,此代码存在的原因-作者试图逃避无尽的递归循环-不会由__getattr__触发self.obj