hasattr
调用哪个魔术方法?
getattr(__o, name)
也称为__o.__getattr__(name)
setattr(__o, name)
也称为__o.__setattr__(name)
但hasattr
的等价物是什么?
我知道in
关键字的相关魔术方法是__contains__
。
hasattr()
没有特定的dunder方法。它本质上等同于:
def hasattr(object, name):
try:
getattr(object, name)
return True
except AttributeError:
return False
因此,它依赖于getattr()
使用的相同dunder方法。
hasattr
的文档特别指出
这是通过调用
getattr(object, name)
并查看它是否引发AttributeError
来实现的。
这意味着__getattr__
和__getattribute__
是您最关心的Dunder。