__getattr__ 特殊方法

__getattr__ special method

为什么下面的 hasattr() return boolean True? 'bar' 属性 未在代码中的任何位置设置。谢谢

class AttrClass(object):
    def __getattr__(self, name):
        pass


data = AttrClass()
print('Current __dict__:  ', data.__dict__)
print('Does bar exists?:  ', hasattr(data, 'bar'))

输出:

Current __dict__:   {}
Does bar exists?:   True

通过覆盖 __getattr__ 方法并使其始终 return None(因为函数没有明确 return 值 returns None 隐式),AttrClass 的实例现在将 return True 对于传递给 hasattr 函数的任何给定名称,仅仅是因为重写的 __getattr__ 方法确实不引发 AttributeError 异常,并且 hasattr 在调用 __getattr__ 方法时获得 AttributeErro 异常时仅 return 为假。

详情请参考documentation