在python里如何知道对象中是否有某某属性

举报
云的记忆 发表于 2019/10/09 09:54:08 2019/10/09
4.8k+ 0 1
【摘要】 用 hasattr():if hasattr(a, 'property'): a.property编辑:请看下面第二位会员的回答,他提供了请求原谅的好建议!一个非常牛逼的方法!python中的一般做法是,如果属性可能大部分时间都在那里,只需调用它,然后让它报错,或者用try/except块捕获它。这可能比hasattr方法 快。如果该属性可能不是大多数时候的属性,或者您不确定,那么使用...

用 hasattr():


if hasattr(a, 'property'):
    a.property

编辑:请看下面第二位会员的回答,他提供了请求原谅的好建议!一个非常牛逼的方法!

python中的一般做法是,如果属性可能大部分时间都在那里,只需调用它,然后让它报错,或者用try/except块捕获它。这可能比hasattr方法 快。如果该属性可能不是大多数时候的属性,或者您不确定,那么使用hasattr可能会比多次落入异常块中更快。


As Jarret Hardie answered, hasattr will do the trick. I would like to add, though, that many in the Python community recommend a strategy of "easier to ask for forgiveness than permission" (EAFP) rather than "look before you leap" (LBYL). See these references:

正如贾***·哈迪所回答的那样,hasattr 有用。不过,我想补充一点,python社区中的许多人推荐了一种策略,即“请求宽恕比获得许可更容易”(eafp),而不是“三思而后行”(lbyl)。请参阅以下参考资料:

EAFP vs LBYL (was Re: A little disappointed so far)
EAFP vs. LBYL @Code Like a Pythonista: Idiomatic Python

ie:

try:
    doStuff(a.property)
except AttributeError:
    otherStuff()

... is preferred to:

…优先考虑:

if hasattr(a, 'property'):
    doStuff(a.property)
else:
    otherStuff()

链接

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。