在 __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
这是一个简单的 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