寻求更好的方法来检查实例属性并根据属性类型分配值

时间:2015-10-08 14:39:51

标签: python introspection praw

我正在使用praw模块,我发现我的对象有时会有一个属性subreddit,它有时是一个字符串,有时候它是一个具有自己属性的对象。我使用以下方法处理了它:

for c in comments:
    if isinstance(c.subreddit, str):
        subreddit_name = c.subreddit
    else:
        subreddit_name =  c.subreddit.display_name

我有两个功能,我必须这样做,而且它真的很难看。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我会使用EAFP而不是LBYL

for c in comments:
    try:
         subreddit_name =  c.subreddit.display_name
    except AttributeError:
        subreddit_name = c.subreddit

您还可以尝试getattr,其默认值为dict.get

subreddit_name = getattr(c.subreddit, 'display_name', c.subreddit)

这实际上是一个更简洁的版本:

subreddit_name = (c.subreddit.display_name 
                  if hasattr(c.subreddit, 'display_name') 
                  else c.subreddit)