__getattr__特殊方法

时间:2019-02-03 07:55:43

标签: attributes python-3.6 getattr

为什么hasattr()在下面返回布尔值True? “酒吧”属性 没有在代码中的任何地方设置。谢谢

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

1 个答案:

答案 0 :(得分:1)

通过重写__getattr__方法并使其始终返回None(由于没有显式返回值的函数将隐式返回None),AttrClass的实例将现在,对于传递给True函数的任何给定名称,返回hasattr仅仅是因为被覆盖的__getattr__方法不会引发AttributeError异常,而hasattr仅返回false当它调用AttributeErro方法时得到__getattr__异常时。

有关详细信息,请参阅documentation