首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套属性的hasattr

嵌套属性的hasattr
EN

Stack Overflow用户
提问于 2014-07-16 19:21:05
回答 6查看 2.8K关注 0票数 4

我需要这样的东西(伪代码):

代码语言:javascript
复制
if hasattr(object, 'detail.infotext')

我的意思是,我想检查对象是否有details属性,如果有,那么details是否有一个名为infotext的属性

我可以这样做:

代码语言:javascript
复制
if hasattr(object, 'detail'):
    if hasattr(object.detail, 'infotext'):
        do something

但是一行代码更容易阅读。

EN

回答 6

Stack Overflow用户

发布于 2014-07-16 19:36:26

我知道这并不是您真正想要做的事情,但不管怎样,它更像是pythonic式的(如果您明确知道要查找的属性的名称):

代码语言:javascript
复制
try:
   do something with object.detail.infotext
except AttributeError:
   do something else
票数 6
EN

Stack Overflow用户

发布于 2014-07-16 20:11:48

假设您想实际使用属性值,operator.attrgetter ( Python 2.6+中的)可能也很有用。您仍然需要捕获一个异常,除此之外,它非常简单:

代码语言:javascript
复制
from operator import attrgetter

try:
   print attrgetter("detail.infotext")(object)
except:
   <handle exception>
票数 2
EN

Stack Overflow用户

发布于 2014-07-16 19:32:46

未经过测试,但它应该可以工作:

代码语言:javascript
复制
def hasattrpath(obj, path):
    parts = path.split(".")
    for part in parts:
        if hasattr(obj, part):
            obj = getattr(obj, part)
        else:
            return False
    else:
        return True

但是,除非您的代码库中到处都有这种带有深度嵌套路径表达式的测试,否则jonrsharpe的注释可能是最直接的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24779483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档