如何知道对象在Python中是否有属性

2024-04-26 09:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

Python中是否有方法确定对象是否具有某些属性?例如:

>>> a = SomeClass()
>>> a.someProperty = value
>>> a.property
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'property'

在使用前,如何判断a是否具有属性property


Tags: 对象方法most属性valuestdinlineproperty
3条回答

尝试^{}

if hasattr(a, 'property'):
    a.property

编辑:请看下面的zweiterlinde's answer,谁提供了请求原谅的好建议!一个非常恶毒的方法!

python中的一般做法是,如果属性可能大部分时间都在那里,只需调用它,然后让异常传播,或者用try/except块捕获它。这可能比hasattr更快。如果该属性可能大部分时间不在那里,或者您不确定,那么使用hasattr可能比重复落入异常块中更快。

您可以使用hasattr()或catch AttributeError,但是如果您真的只需要属性的默认值(如果它不存在),那么最好的选择就是使用^{}

getattr(a, 'property', 'default value')

正如Jarret Hardie所回答的那样,hasattr将发挥作用。不过,我想补充一点,Python社区中的许多人推荐了一种策略,即“请求宽恕比获得许可更容易”(EAFP),而不是“三思而后行”(LBYL)。请参阅以下参考资料:

EAFP vs LBYL (was Re: A little disappointed so far)
EAFP vs. LBYL @Code Like a Pythonista: Idiomatic Python

即:

try:
    doStuff(a.property)
except AttributeError:
    otherStuff()

。。。优先考虑:

if hasattr(a, 'property'):
    doStuff(a.property)
else:
    otherStuff()

相关问题 更多 >