hasattr 调用哪种神奇方法?

Which magic method does hasattr call?

提问人:Simon Van den Bossche 提问时间:8/2/2022 最后编辑:ChrisSimon Van den Bossche 更新时间:8/2/2022 访问量:300

问:

调用哪种魔术方法方法?hasattr

getattr(__o, name)也可以称为__o.__getattr__(name)

setattr(__o, name)也可以称为__o.__setattr__(name)

但是等价物是什么?hasattr

我知道关键字的相关魔术方法是 .in__contains__

Python 方法

评论

1赞 rv.kvetch 8/2/2022
我认为它调用了 getattr 但随后丢弃了结果。类似于 JS 术语。!!getattr(name)
6赞 Barmar 8/2/2022
阅读文档。它调用并捕获异常。getattr()
2赞 Blckknght 8/2/2022
知道它不是由 直接调用的可能会有所帮助。相反,它会调用 ,这可能会调用(对于通常找不到的属性)。__getattr__getattr__getattribute____getattr__
0赞 juanpa.arrivillaga 8/2/2022
不可以不等同于 ,与 相同。魔术师是钩子getattr.__getattr__setattr

答:

5赞 Barmar 8/2/2022 #1

没有特定的 dunder 方法。它基本上等同于:hasattr()

def hasattr(object, name):
    try:
        getattr(object, name)
        return True
    except AttributeError:
        return False

因此,它依赖于 使用的相同 dunder 方法。getattr()

3赞 Mad Physicist 8/2/2022 #2

hasattr 的文档特别指出

这是通过调用并查看它是否引发 AttributeError 来实现的。getattr(object, name)

这意味着__getattr____getattribute__是你最关心的问题。