2015-10-08 4 views
1

Я работаю с модулем praw, и я обнаружил, что мои объекты иногда имеют свойство subreddit, что иногда является строкой, а иногда это объект с его собственными свойствами. Я имел дело с ним, используя следующее:Ищет лучший способ проверить свойство экземпляра и присвоить значение в зависимости от типа свойства

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

У меня есть две функции, где я должен сделать это, и это действительно некрасиво. Есть ли лучший способ справиться с этим?

ответ

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) 
+0

Я попробую getattr, не знаю вы можете указать значение по умолчанию. Спасибо за удобные акронимы. – sunny

Смежные вопросы