寻求一种更好的方法来检查实例 属性 并根据 属性 类型分配值
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
我有两个函数必须这样做,这真的很难看。有没有更好的方法来处理这个问题?
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)
我正在使用 praw 模块,我发现我的对象有时有一个 属性 subreddit
,它有时是一个字符串,有时是一个具有自己属性的对象。我使用以下方法处理它:
for c in comments:
if isinstance(c.subreddit, str):
subreddit_name = c.subreddit
else:
subreddit_name = c.subreddit.display_name
我有两个函数必须这样做,这真的很难看。有没有更好的方法来处理这个问题?
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)