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

Seeking a better way to check an instance property and assign value depending on property type

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

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

我有两个函数必须这样做,这真的很难看。有没有更好的方法来处理这个问题?

我会使用 EAFP rather than 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)